DLL_PROCESS_DETACH 未调用 C++
DLL_PROCESS_DETACH not called C++
支持!
我为 attaching/detaching 制作了一个简单的脚本,但是如果我按 F11,DLL 会被杀死但不会在 "normal way" 中被杀死,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;
}
如有任何帮助,我们将不胜感激!
你的代码很好,除了你的 switch 语句中没有 case DLL_PROCESS_DETACH。有时需要另一双眼睛才能看出错误。
编辑:您应该能够将 DLL_THREAD_DETACH 与 DLL_PROCESS_DETACH 切换,一切都会工作正常。
支持!
我为 attaching/detaching 制作了一个简单的脚本,但是如果我按 F11,DLL 会被杀死但不会在 "normal way" 中被杀死,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;
}
如有任何帮助,我们将不胜感激!
你的代码很好,除了你的 switch 语句中没有 case DLL_PROCESS_DETACH。有时需要另一双眼睛才能看出错误。
编辑:您应该能够将 DLL_THREAD_DETACH 与 DLL_PROCESS_DETACH 切换,一切都会工作正常。