Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Win32 GUI:无法创建Win32 GUI对话框_C++_Windows_Winapi_User Interface_Win32gui - Fatal编程技术网

C++ Win32 GUI:无法创建Win32 GUI对话框

C++ Win32 GUI:无法创建Win32 GUI对话框,c++,windows,winapi,user-interface,win32gui,C++,Windows,Winapi,User Interface,Win32gui,我正在尝试创建一个简单的dll,其中包含一个.rc文件,其中包含简单的对话框和列表框。我在VisualStudio的帮助下,通过拖放控件创建了资源。我公开了一个函数,它是intern callsDialogBox()API 我正在从示例windows应用程序动态加载dll,并调用公开的函数。对话框创建失败,错误代码为126 有谁能帮我解释一下为什么会这样 代码如下: INT_PTR CALLBACK WndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,

我正在尝试创建一个简单的dll,其中包含一个.rc文件,其中包含简单的对话框和列表框。我在VisualStudio的帮助下,通过拖放控件创建了资源。我公开了一个函数,它是intern callsDialogBox()API

我正在从示例windows应用程序动态加载dll,并调用公开的函数。对话框创建失败,错误代码为126

有谁能帮我解释一下为什么会这样

代码如下:

INT_PTR CALLBACK WndProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {

    case WM_INITDIALOG:
        {
               InitCommonControls();
               PopulateList(hwndDlg);
               return TRUE;
        }
    case WM_COMMAND:
        {
          switch(wParam)
          {
          case IDOK:
              SaveSelectedItem(hwndDlg);
               EndDialog(hwndDlg,0);    
               return TRUE;
         case IDCANCEL:
               EndDialog(hwndDlg, 0);
               return TRUE;

          }

        }   
    default:
        DefWindowProc(hwndDlg, uMsg, wParam, lParam);

    }
}
HINSTANCE gInstance;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR lpCmdLine, int nCmdShow) 
{
DialogBox(gInstance, MAKEINTRESOURCE(IDD_DIALOG), hwnd, WndProc);

return TRUE;
}

您从未分配给
gInstance
,因此它默认初始化为
NULL
。然后将其传递到
对话框

hInstance
分配给
WinMain
中的
gInstance

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR lpCmdLine, int nCmdShow) 
{
    gInstance = hInstance;
    DialogBox(gInstance, MAKEINTRESOURCE(IDD_DIALOG), hwnd, WndProc);
    return TRUE;
}
或者干脆把
gInstance
一扫而光,因为你在其他任何地方都不用它。删除变量并使您的
WinMain
如下所示:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
               LPSTR lpCmdLine, int nCmdShow) 
{
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), hwnd, WndProc);
    return TRUE;
}
还有更多的代码需要省略,因为我看不到
hwnd
的声明或初始化。如果可能的话,最好展示一个完整的SSCCE,这显然是可能的


还要注意Raymond对这个问题的评论,并将对InitCommonControls的调用移到WinMain中。

您的程序正在调用
InitCommonControlsEx()
?您能显示一两行代码吗?您的代码在哪里?我没有看到任何代码。@markransem:我想看到整个函数!还要注意,您调用
InitcommonControls()
太晚了。您需要在调用
对话框
之前调用它,因为对话框上的控件是在获取
WM_INITDIALOG
消息之前创建的。