Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows DllMain未在cygwin gcc编译程序中调用_Windows_Gcc_Cygwin - Fatal编程技术网

Windows DllMain未在cygwin gcc编译程序中调用

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

我正在尝试使用cygwin构建DLL,但在DbgView中,未观察到任何输出:

#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_条目这次被重新定义了