WinApp是怎么与WinMain关联起来的?
也就是说一个MFC程序首先创建了一个全局的WinApp对象,调用了相应构造函数进行了对象的构建。我通过设置断点跟踪看到MFC内部确实有一个WinMain函数,可我不清楚WinMain函数是怎么与MFC关联起来的呢,为什么在构造完WinApp对象后就进入WinMain了呢?
既然处于隐藏下的WinMain确实被调用了,但WinMain是怎么样与工程联系起来的,也就是WinMain到底是怎么加入到这个MFC工程的

解决方案 »

  1.   

    WinMain()里面有很多调用,是可以暴露给程序员的,不过一般程序不用理会程序主窗口的创建和消息循环。
      

  2.   

    那是程序的入口函数,当你运行程序时,系统会找到该函数进行调用.
    你可简单认为这是程序运行的规定.
    一旦应用程序启动运行,操作系统就不再考虑应用程序拥有什么类型的用户界面.
    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 
      

  3.   

    可以看看这个:
    http://blog.csdn.net/hityct1/archive/2009/01/01/3678525.aspx
      

  4.   

    好好看看MFC源码!
    工程编译完毕了,可以直接按F10,你就能看见了
      

  5.   

    是这样的:
    先有WinApp,因为是全局变量,先于main函数被构造再有WinMain最后才有MFC的各种行为是WinMain启动了MFC,而不是MFC加入了WinMain详细内容见孙鑫VC教程第3讲
      

  6.   

    编译时MFC头文件里引入了大量的#pragma comment(lib,
    WinMain一定在某个lib文件里的,具体是哪个还真不清楚。。
    查起来有点麻烦。。
    不过这个WinMain肯定是静态链接另,静态对象的构造先于WinMain执行
    一般来说,如果没有更改ENTRY,WinMainCRTStartip是Windows子系统程序的进入点,该函数首先构造静态对象,然后才是WinMain的调用