我一直试图创建一个创建对话框的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中不能正常工作?
答案 0 :(得分:0)
对话框资源是否驻留在应用程序或DLL中?
如果它驻留在应用程序中,则需要执行以下操作:
DialogBoxW (NULL, ...);
但是,如果它驻留在DLL中,则需要这样做:
DialogBoxW (hInst, ...);
当hInst
== hinstDLL
时,dwReason
设置为传递给DllMain()
的DLL_PROCESS_ATTACH
的值(如注释中所示)。 / p>
此外,在您的CreateThread ()
中对DllMain
的呼叫看起来非常可疑。怎么办? (请将信息添加到您的问题中,谢谢)。