本帖最后由 lin6194 于 2010-10-29 11:33:25 编辑

解决方案 »

  1.   

    dllmain 函数里面记录hinstance
      

  2.   

    HINSTANCE 是包含你对话框IDD_DLG_INFO 模板的HINSTANCE。。
      

  3.   


    不是MFC写的DLL,纯C语言,没有dllmain的入口函数。
      

  4.   

    hInstance: Handle to the module whose executable file contains the dialog box template. 即 hInstance 是包含有对话框资源(即 IDD_DLG_INFO)的 Module 的句柄。
    如果是DLL的资源,就用 DllMain 传入的句柄;
    如果是EXE的资源,就用 GetModuleHandle(NULL) 获得句柄;
      

  5.   


    我的对话框模板是放在DLL资源里面的,这样是不是得不到HINSTANCE,因为单独的DLL没有实例的吧。感觉这个是应该从上层调用传下来的吧,如何得到调用DLL的上层的HINSTANCE?
      

  6.   

    关于你后面问的问题:任何 DLL 都有 DllMain 函数,否则不是 DLL。
      

  7.   

    可以用 GetModuleHandle()得到Hmodule 
      

  8.   

    lRes = GetModuleHandle(NULL);
    hWnd = CreateDialog(lRes, IDD_DLG_INFO, NULL, NULL);
    i = ShowWindow(hWnd, SW_SHOW); printf("\r\n  hWnd = %X,  SW = %d, Handle = %d", hWnd, i, lRes);         控制台输出的是:  hWnd = 0,  SW = 0, Handle = 20840448         还是不能生成窗口, hWnd是0.
      

  9.   

    hWnd = CreateDialog(lRes, IDD_DLG_INFO, NULL, NULL);没有窗口过程参数,你这里设置为NULL???
      

  10.   

    INT_PTR CALLBACK DialogProc(HWND hwndDlg,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam )
    {
    printf("\r\n hwnd:%d, msg:%d,  wp:%d,  lp:%d",hwndDlg, uMsg, wParam, lParam);
    }
    hWnd = CreateDialog(lRes, IDD_DLG_INFO, NULL, DialogProc);
    ShowWindow(hWnd, SW_SHOW);       DialogProc回调不成功,没有执行
      

  11.   

    请重新看一下我的回复。
    如果你的资源是在 DLL 中而非 EXE 中,你就不应该用 GetModuleHandle 来获取资源句柄。
      

  12.   

    纯C语言才有DllMain啊,MFC的DLL应该没有入口函数吧。
      

  13.   

    对于这个参数可以用GetModuleHandle(DLL名)来获取的。这个应该是模块句柄,不同于实例
      

  14.   

    这个需要再dllmain的时候创建一个线程在线程里创建对话框就可以了