我已经构建了一个 DLL,它通常通过 SetWindowHookEx 注入到控制台应用程序中。DLL 将信息输出到我一直在使用 std::cout 的控制台很重要。DLL 接近完成,直到我尝试在发布模式下构建 DLL,这使得所有 cout 行都无用。我已经验证了 DLL 正在注入并通过执行简单的 null 取消引用来执行,这会导致程序在 dllmain 函数中崩溃。与 std::printf 相同的故事。
void onAttach()
{
//WARNING THIS IS A DEMONSTRATION
std::cout<<"test"<<std::endl;
//int* intPtr = 0;
//*intPtr = 3; //This causes a crash
}
// entry point
BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
switch ( dwReason )
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls ( hModule );
CreateThread ( NULL, 0, ( LPTHREAD_START_ROUTINE ) onAttach, NULL, 0, NULL );
return true;
break;
case DLL_PROCESS_DETACH:
return true;
break;
}
}
我真的不知道如何解决这个问题。Release 链接器是否以某种方式排除了依赖项?
我正在使用 MSVS 2010 和默认发布/调试配置设置。debug dll 大约 5,137kb,release dll 只有 23kb。