WinApp是怎么与WinMain关联起来的?
也就是说一个MFC程序首先创建了一个全局的WinApp对象,调用了相应构造函数进行了对象的构建。我通过设置断点跟踪看到MFC内部确实有一个WinMain函数,可我不清楚WinMain函数是怎么与MFC关联起来的呢,为什么在构造完WinApp对象后就进入WinMain了呢?
既然处于隐藏下的WinMain确实被调用了,但WinMain是怎么样与工程联系起来的,也就是WinMain到底是怎么加入到这个MFC工程的
也就是说一个MFC程序首先创建了一个全局的WinApp对象,调用了相应构造函数进行了对象的构建。我通过设置断点跟踪看到MFC内部确实有一个WinMain函数,可我不清楚WinMain函数是怎么与MFC关联起来的呢,为什么在构造完WinApp对象后就进入WinMain了呢?
既然处于隐藏下的WinMain确实被调用了,但WinMain是怎么样与工程联系起来的,也就是WinMain到底是怎么加入到这个MFC工程的
你可简单认为这是程序运行的规定.
一旦应用程序启动运行,操作系统就不再考虑应用程序拥有什么类型的用户界面.
Windwos应用程序必须拥有一个在应用程序启动运行时调用的进入点函数.可以使用的进入点函数有4个:
int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PSTR pszCmdLine, int nCmdShow);
int WINAPT wWinMain(HINSTANCE hinstExe,HINSTANCE, PWSTR pszCmdLine,int nCmdShow);
int __cdecl main(int argc,char *argv[],char *envp[]);
int _cdecl wmain(int argc, wchar_t *argv[], wchar_t *envp[]);操作系统实际上并不调用你编写的进入点函数,它调用的是C/C++运行期启动函数.该函数负责对C/C++
运行期库进行初始化.这样就可以调用malloc,free之类的函数.它还能够确保已经声明的任何全局对象
和静态C++对象能够在代码执行以前正确地创建. // 在_cinit()函数中
与main对应的启动函数:
WinMain WinMainCRTStartup
wWinMainw WinMainCRTStartup
main mainCRTStartup
wmain wmainCRTStartup
http://blog.csdn.net/hityct1/archive/2009/01/01/3678525.aspx
工程编译完毕了,可以直接按F10,你就能看见了
先有WinApp,因为是全局变量,先于main函数被构造再有WinMain最后才有MFC的各种行为是WinMain启动了MFC,而不是MFC加入了WinMain详细内容见孙鑫VC教程第3讲
WinMain一定在某个lib文件里的,具体是哪个还真不清楚。。
查起来有点麻烦。。
不过这个WinMain肯定是静态链接另,静态对象的构造先于WinMain执行
一般来说,如果没有更改ENTRY,WinMainCRTStartip是Windows子系统程序的进入点,该函数首先构造静态对象,然后才是WinMain的调用