Windows DllMain未在cygwin gcc编译程序中调用
我正在尝试使用cygwin构建DLL,但在DbgView中,未观察到任何输出:Windows DllMain未在cygwin gcc编译程序中调用,windows,gcc,cygwin,Windows,Gcc,Cygwin,我正在尝试使用cygwin构建DLL,但在DbgView中,未观察到任何输出: #include <windows.h> __declspec(dllexport) BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { s
#include <windows.h>
__declspec(dllexport) BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
OutputDebugStringA("DLL_PROCESS_ATTACH called");
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
__attribute__((stdcall))
int _DllMainCRTStartup(int handle, int reason, void *ptr)
{
return DllMain(handle, reason, ptr);
}
#包括
__declspec(dllexport)BOOL Apicent DllMain(HMODULE HMODULE,
德沃德·乌尔打电话的理由,
LPVOID lpReserved
)
{
开关(ul\u呼叫原因\u)
{
案例DLL\u进程\u附加:
OutputDebugStringA(“调用DLL_进程_附加”);
案例DLL\u线程\u连接:
案例DLL\u线程\u分离:
案例DLL\u进程\u分离:
打破
}
返回TRUE;
}
__属性(stdcall))
int\u DllMainCRTStartup(int句柄、int原因、void*ptr)
{
返回DllMain(处理、原因、ptr);
}
到目前为止,似乎根本没有调用DllMain,出了什么问题?这里将有用地查找二进制dll,而不是src代码。作为旁注-您不需要导出
DllMain
,如果您不使用crt-直接将入口点设置为DllMain
-在这种情况下没有意义有\u DllMainCRTStartup
@RbMm这是cygwin的具体问题。它是如何工作的。\u DllMainCRTStartup
完全被忽略。dll的真正入口点是\u cygwin\u dll\u entry
——只有在dll\u THREAD\u ATTACH
、dll\u THREAD\u DETACH
和dll\u PROCESS\u DETACH
的情况下,它才会调用您的DllMain
。但不是在DLL\u进程\u附加
的情况下。我不认识cygwin,也说不出原因。如果您为windows构建-最好使用msvcenvironment@RbMm_cygwin_dll_条目成功,您可以添加答案below@RbMm奇怪的是,我试着编译另一个程序,_cygwin_dll_条目这次被重新定义了