DLL_PROCESS_DETACH не называется C ++ - PullRequest
       16

DLL_PROCESS_DETACH не называется C ++

0 голосов
/ 03 октября 2018

Sup!

Я делаю простой скрипт для присоединения / отсоединения, но если я нажимаю F11, DLL убивается, но не «обычным способом», DLL_PROCES_DETACH не называется

чтоможет быть проблема?

#include <Windows.h>
#include <thread>

HMODULE hMod            = nullptr;
bool    bDebugMode      = true;
bool    bLeave          = false;

void Setup(void);

void Setup()
{
    while (true)
    {
        if (GetAsyncKeyState(VK_F11) & 1)
        {
            std::this_thread::sleep_for(std::chrono::milliseconds(200));
            FreeLibraryAndExitThread(hMod, 1);
        }

        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:

        hMod = hModule;
        DisableThreadLibraryCalls(hModule);
        if(bDebugMode)
            MessageBox(NULL, "Attach", "Attached", MB_OK);

        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)Setup, 0, 0, 0); break;

    case DLL_THREAD_DETACH:

        Beep(500, 100);

        if(bDebugMode)
            MessageBox(NULL, "Detach", "Detach called!", MB_OK); break;
    }
    return true;
}

любая помощь будет оценена!

1 Ответ

0 голосов
/ 03 октября 2018

Ну, с вашим кодом все в порядке, за исключением того, что в вашем операторе switch нет регистра DLL_PROCESS_DETACH.Иногда требуется просто пара глаз, чтобы увидеть ошибку.

РЕДАКТИРОВАТЬ: Вы должны быть в состоянии переключить DLL_THREAD_DETACH с DLL_PROCESS_DETATCH, и все будет работать нормально.

...