我有一个这样定义的DllMain:
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
int i=0, DoHijack=0;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
hMod = hModule;
hProcessCenter = ::FindWindow(NULL, _T("Form1"));
ExtractPaths(hModule, ExePath, &kNTIExeName, kNTIDllPath, &kNTIDllName);
//Only hook target processses
for(i=0; i < NB_TARGETS; i++)
{
if(strstr(kNTIExeName, Targets[i]))
DoHijack=1;
}
if(DoHijack)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)Real_DrawText, Mine_DrawText); // <- magic
DetourAttach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut);
DetourTransactionCommit();
break;
}
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)Real_DrawText, Mine_DrawText);
DetourDetach(&(PVOID&)Real_ExtTextOut, Mine_ExtTextOut); // <- magic
DetourTransactionCommit();
break;
}
return TRUE;
}这是一个我从工作中买回家的项目,在我编译和运行它之后,dllmain永远不会被调用,因此我的问题是process_attach开关永远不会被点击。是什么原因导致了这种情况的发生?编译器中的某些东西,其中一个链接选项?
动态链接库在工作中运行良好...
谢谢。
发布于 2010-10-24 12:37:41
你不能“运行”DLL。也许您已经将其构建为一个可执行项目,对于这个项目,DllMain没有什么特别的意义。
发布于 2010-10-26 05:31:09
今天早上我重新审视了它,意识到dllmain正在被调用,但实际上我在一个检查NBTargets值中犯了一个错误,这就是为什么我的代码不能执行……
回到它..。
https://stackoverflow.com/questions/4007161
复制相似问题