网上下了一个MFC程序,他用vc6编的,我装的是vs2012,打开工程后为啥找不到程序入口函数啊

网上下了一个MFC程序,他用vc6编的,我装的是vs2012,打开工程后为啥找不到程序入口函数啊,第1张

mfc程序的入口函数为winmain()

但这个winmain被mfc封装了,也就是说工程里是找不到这个函数的。

但你也不用找。因为既然mfc封装了入口,就说明入口处不需要你做什么事情。

mfc会把你需要编写地方的代码给你的。

如果想了解mfc的架构。请搜索孙鑫MFC

入口是不需要被你看到的,因为MFC入口里做的东西都是一些重复的东西,没有必要让人看到。

他的入口其实就是winmain

两种工程没有什么不一样的,mfc就是微软把东西都封装好,替你干了一些重复的没有啥意义的事情

extern "C" int WINAPI

_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPTSTR lpCmdLine, int nCmdShow)

{

// call shared/exported WinMain

return AfxWinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)

}

这个是MFC已经准备好直接由链接器加到应用程序中的,注:这里的_tWinMain是为了兼容Unicode制作的

#ifdef _UNICODE

#define _tWinMain wWinMain

#else

#define _tWinMain WinMain

#endif

而AfxWinMain

int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,

LPTSTR lpCmdLine, int nCmdShow)

{

ASSERT(hPrevInstance == NULL)

int nReturnCode = -1

CWinThread* pThread = AfxGetThread()

CWinApp* pApp = AfxGetApp()

// AFX internal initialization

if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))

goto InitFailure

// App global initializations (rare)

if (pApp != NULL &&!pApp->InitApplication())

goto InitFailure

// Perform specific initializations

if (!pThread->InitInstance())

{

if (pThread->m_pMainWnd != NULL)

{

TRACE0("Warning: Destroying non-NULL m_pMainWnd\n")

pThread->m_pMainWnd->DestroyWindow()

}

nReturnCode = pThread->ExitInstance()

goto InitFailure

}

nReturnCode = pThread->Run()

InitFailure:

#ifdef _DEBUG

// Check for missing AfxLockTempMap calls

if (AfxGetModuleThreadState()->m_nTempMapLock != 0)

{

TRACE1("Warning: Temp map lock count non-zero (%ld).\n",

AfxGetModuleThreadState()->m_nTempMapLock)

}

AfxLockTempMaps()

AfxUnlockTempMaps(-1)

#endif

AfxWinTerm()

return nReturnCode

}

你可以自己看源码,在vc安装目录的MFC源文件里,以上两个函数分别在APPMODUL.cpp和WINMAIN.cpp

里面。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11832122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存