AfxWinInit(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
请问一下再执行WinMain函数之前怎么会调用这个函数呢?

解决方案 »

  1.   

    AfxWinInitBOOL AFXAPI AfxWinInit(
         HINSTANCE hInstance,
         HINSTANCE hPrevInstance,
         LPTSTR lpCmdLine,
         int nCmdShow
        );参数: hInstance 当前运行模块的句柄。  
    hPrevInstance 应用程序前一个实例的句柄。对于基于Win32的应用程序,这个参数总是NULL。  
    lpCmdLine 指向一个以null结尾的字符串,指定了应用程序的命令行。  
    nCmdShow 指定了GUI应用程序的主窗口将如何显示。  说明:
    这个函数是由MFC提供的WinMain函数调用的,它是基于GUI的应用程序的CWinApp初始化的一部分,主要用来初始化MFC。对于控制台应用程序,不使用MFC提供的WinMain函数,你必须直接调用AfxWinInit来初始化MFC。
    如果你自己调用AfxWinInit,你必须声明一个CWinApp类的实例。对于控制台应用程序,你可以选择不从CWinApp基础你自己的类,而是直接使用CWinApp的实例。如果你决定在你的main函数的实现中将所有的工作留给你的应用程序,这样做是可以的。
    例子程序TEAR演示了如何用MFC生成一个控制台应用程序。示例:
    // this file must be compiled with the /GX and /MT options:
    //      cl /GX /MT thisfile.cpp#include <afx.h>
    #include <afxdb.h>
    #include <iostream.h>int main()
    {
      // try to initialize MFC  if(!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
      {
        cerr << "MFC failed to initialize!" << endl;
        return 1;
      }  // 试图与并不存在的ODBC数据库连接
      // (如果不初始化MFC,这根本不会起作用。)  CDatabase db;
      try
      {
        db.Open("This Databsae Doesn't Exist");    // 我们不会真正到达这里。    cout << "Successful!" << endl;
        cout << "Closing ... ";
        db.Close();
        cout << "Closed!" << endl;
      }
      catch(CDBException* pEx)
      {
        // 我们到达了一个异常。输出错误信息。
        // (如果不初始化MFC,这根本不会起作用。)    char sz[1024];    cout << "Error: ";
        if(pEx->GetErrorMessage(sz, 1024)) cout << sz;
        else cout << "No error message was available";
        cout << endl;    pEx->Delete();
        return 1;
      }  return 0;
    }
      

  2.   

    winmain是入口,AfxWinInit 是由winmain调用的
      

  3.   

    那怎么先进入AfxWinInit,后进入winmain的啊?