[英]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
(如您在您的评论显示)。
另外,在DllMain
对CreateThread ()
的DllMain
看起来非常可疑。 怎么办? (请将信息添加到您的问题中,谢谢)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.