繁体   English   中英

DialogBoxW在DLL中不起作用,但在exe中起作用

[英]DialogBoxW Not working in DLL but work in exe

我一直在尝试创建一个创建对话框的DLL。 当我将其编译为可执行文件时,将显示该对话框,但是当我尝试将其编译为DLL时,则不会显示该对话框。

LRESULT CALLBACK SubDiag(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    switch (Msg)
    {
    case WM_CLOSE:
        EndDialog(hDlg, 0);
        break;

    default:
        return FALSE;
        break;
    }

    return false;
}

LRESULT CALLBACK MainDiag(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    switch (Msg)
    {
    case WM_INITDIALOG:

        break;
    case WM_COMMAND:
        switch (LOWORD(wParam))
        {
        case ID_Button:
            DialogBoxW(hInst, MAKEINTRESOURCEW(IDD_SUB), hDlg, DLGPROC(SubDiag));
            break;
        }
        break;

    case WM_CLOSE:
        EndDialog(hDlg, 0);
        break;

    default:
        return FALSE;
        break;
    }

    return false;
}

DWORD WINAPI Thread(LPVOID dwParam)
{
    HWND _hwnd = CreateDialogW(hInst, MAKEINTRESOURCE(IDD_MAIN), NULL, DLGPROC(MainDiag));
    ShowWindow(_hwnd, SW_SHOW);

    MSG msg = { 0 };
    while (IsWindow(_hwnd) && GetMessage(&msg, NULL, 0, 0))
    {
        if (!IsDialogMessage(_hwnd, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return 0;
}

为什么在DLL中不起作用?

对话框资源是否驻留在应用程序或DLL中?

如果它驻留在应用程序中,则需要执行以下操作:

DialogBoxW (NULL, ...);

但是,如果它驻留在DLL中,则需要执行以下操作:

DialogBoxW (hInst, ...);

hInst设置为价值hinstDLL传递到DllMain()dwReason == DLL_PROCESS_ATTACH (如您在您的评论显示)。

另外,在DllMainCreateThread ()DllMain看起来非常可疑。 怎么办? (请将信息添加到您的问题中,谢谢)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM