技术内幕1说该启动函数调用了cwinapp类的构造函数,可是我看了crt0.c里面的源码却只看
到其调用了winmain函数,maincrtstartup到底是在哪里调用了app的构造函数呢?

解决方案 »

  1.   

    不是直接调用。针对 CWinApp theApp,编译器在.CRT$XCA ~ .CRT$XCZ段中生成指向theApp构造的函数指针。
    WinMainCRTStartup->_ioinit(crt0dat.c)->_initterm(crt0dat.c),_initterm 将对.CRT$XCA ~ .CRT$XCZ中的每一项进行调用,以构造(初始化)所有的C++静态、全局对象。
      

  2.   

    .CRT$XCA ~ .CRT$XCZ是什么?
    _ioinit找到了,原来这么神奇的过程阿
      

  3.   

    在winmain前有个全局的winapp类的定义
      

  4.   

    你说的也是通过ioinit的吧?
    请问2楼说的.CRT$XCA ~ .CRT$XCZ是什么?
      

  5.   

    不好意思,笔误,_ioinit应该是_cinit,其他不变。.CRT$XCA ~ .CRT$XCZ是数据段,用于C++静态、全局对象的初始化(构造),可看作初始化表。
    还有其他类似的段。如:.CRT$XIA ~ .CRT$XIZ 用于C的初始化表。等等。