Winapi: создать окно в плагине - PullRequest
1 голос
/ 06 февраля 2012

Я разрабатываю плагин (DLL, загружаемая другим приложением).Есть специальная функция, которая должна возвращать HWND, чтобы приложение могло показывать диалог.Проблема в том, что я не знаю, откуда мне взять hInstance (он не передается в качестве параметра функции).

Похоже, я чего-то не понимаю, я новичок ввсе эти вещи, так что простите, если вопрос глупый.

UPD : попытался получить hInstance с getModuleHandle:

void* createLoginDialog() {
    HINSTANCE hIns = (HINSTANCE) GetModuleHandle(L"comapping");
    HWND hWnd = CreateWindow(L"Popup",
                        L"Enter login",
                        WS_POPUP,
                        20,
                        20,
                        20,
                        20,
                        NULL,
                        NULL,
                        hIns,
                        NULL);
    return hWnd;
}

Я все еще получаю доступНарушение.

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

Несколько способов получить его:

  • Первый аргумент, переданный вашей точке входа DllMain (), приведен к HINSTANCE
  • GetModuleHandle (), используя ваше имя DLL, приведено к HINSTANCE
  • VirtualQuery (), передавая адрес вашей функции. Приведите возвращенный MEMORY_BASIC_INFORMATION.BaseAddress в HINSTANCE. Работает как на 32-битных, так и на 64-битных версиях Windows.
3 голосов
/ 06 февраля 2012

Согласно документации CreateWindow аргумент hInstance является необязательным. Это означает, что здесь допустимо передавать NULL. Однако, как указывает Саймон Рихтер в комментариях к этому ответу, аргумент может быть только NULL класс окна зарегистрирован глобально.

Если вы пишете DLL, вы также можете самостоятельно определить функцию точки входа DllMain. Эта функция вызывается Windows, передавая дескриптор вашей функции в качестве первого дополнения. Вы можете запомнить этот дескриптор где-нибудь, чтобы использовать его при создании своего окна.

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