DialogBoxW Не работает в DLL, но работает в EXE - PullRequest
0 голосов
/ 23 июня 2018

Я пытался создать 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?

1 Ответ

0 голосов
/ 27 июня 2018

Ресурс диалога находится в приложении или DLL?

Если он находится в приложении, то вам нужно сделать:

DialogBoxW (NULL, ...);

Но если он находится в DLL, то вам нужно сделать:

DialogBoxW (hInst, ...);

Где hInst устанавливается на значение hinstDLL, переданное DllMain(), когда dwReason == DLL_PROCESS_ATTACH (как показано в вашем комментарии).

Кроме того, этот вызов CreateThread () в вашем DllMain выглядит весьма подозрительно. Что за дело с этим? (Пожалуйста, добавьте информацию к вашему вопросу, спасибо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...