Я пытаюсь поставить WINAPI WinMain в DLL

Я делаю файл DLL и в то же время пытаюсь вызвать эту функцию автоматически, когда моя DLL загружена. Как я могу это сделать? Это основная функция Windows API, которая создает окно, но я не знаю, как это сделать. Моя первая идея состоит в том, чтобы поместить его в функцию DllMain, но я действительно уверен, что это будет работать, а также что заполнять переменные "HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow"

Ниже приведена функция, которую я пытаюсь вызвать автоматически, когда моя библиотека загружена, и я ожидаю, что она откроет окно. Благодарю.

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);

2 ответа

Решение

Существуют ограничения на то, что вы можете делать в функции DllMain:

Вызов функций, которым требуются библиотеки DLL, отличные от Kernel32.dll, может привести к проблемам, которые трудно диагностировать. Например, вызов функций User, Shell и COM может привести к ошибкам нарушения доступа, поскольку некоторые функции загружают другие компоненты системы.

Это исключает создание окна непосредственно из DllMain. Однако вы можете запустить поток из вашего DllMain, и этот поток может создать окно.

DLL есть WinMain() функция. DllMain() или же DllEntryPoint() это то, что вы ищете. Windows сама вызывает их, когда DLL загружается и выгружается. Вы не называете их сами, вы их внедряете. Что касается создания окна, вы звоните CreateWindow/Ex() и связанные функции.

Другие вопросы по тегам