int WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow);我想知道 HINSTANCE 这参数是怎么传进去的,一个实例的句柄,指向应用程序.若这应用程序已经产生了,那产生这程序时传什么给HINSTANCE?若这应用程序没有产生了,通过Winmain()来产生,那 HINSTANCE 又指向什么应用程序呢?呵呵,好象有点类似 鸡和鸡蛋 .

解决方案 »

  1.   

    OPS 加载 EXE 文件到内存(并创建EXE在内存中的映像,为进程分配内存)这时就相当于创建了一个该EXE的实例。已经有一个句柄了, 之后, OPS 将 控制权转移到 EXE, 通过内核调用 EXE 的入口 main 来实现, 这时它自然知道 HINSTANCE, 并传给 EXE。
      

  2.   

    你的winmian是由
    WinMainCRTStartup
    来调用的GetStartupInfo(&StartupInfo);
    int nMainRetVal = wWinMain(GetMjduleHandle(NULL),
       NULL, pszCommandLineUnicode,
       (StartupInfo.dwFlags & STARTF_USESHOWWINDOW) ? 
       StartupInfo.wShowWindow:SW_SHOWDEFAULT);
      

  3.   

    krh2001(边城浪子) ( ) 信誉:113  2006-8-10 20:55:40  得分: 0  
     
    OPS 加载 EXE 文件到内存(并创建EXE在内存中的映像,为进程分配内存)这时就相当于创建了一个该EXE的实例。已经有一个句柄了, 之后, OPS 将 控制权转移到 EXE, 通过内核调用 EXE 的入口 main 来实现, 这时它自然知道 HINSTANCE, 并传给 EXE。===============================================================================OPS 是什么? "OPS 加载 EXE 文件到内存", EXE 哪来的?我觉得好象只有代码,最多就算有 OBJ 吧.在c++ 中.若需要命令行参数的话,而又没给.那么可以编译运行,但运行会出错,会有相应的 EXE生成,若 VC 也是如此,那运行也该报错下.  
     
      

  4.   

    To 
     handsomerun(毛毛) ( ) ============================================================================Winmain 不是程序入口函数吗?除了全局变量外就该先执行他了?
      

  5.   

    是阿,
    系统调用WinMainCRTStartup,然后来调winmain的,建议去看一下windows核心编程其实在调winmain之前,系统帮你做了好多事了
      

  6.   

    那我觉得不管怎么样,总要有一个 EXE 先产生,然后才会有实例句柄,不知道我这么理解对不对?