DllMain在Cygwin上使用g ++表现得很奇怪

时间:2014-06-25 16:03:33

标签: dll g++ cygwin

我在Cygwin上使用gcc v4.8.3。我不确定DllMain()应该如何在这种情况下表现。

当我用mingw编译相同的代码时,它按预期工作,我得到输出:

Hello from DllMain 
Hello from main 
I'm a _WIN32 
I'm a __MINGW32__ 
I'm a __cplusplus 
Calling workhorse 
Hello from workhorse 
ret 1 
Hello from DllMain

当我在Cygwin中用g ++编译它时,我得到了

Hello from DllMain

仅此而已。救命!我想我可以在没有DllMain()的g ++版本中生活,但似乎我只有一小步之遥。

这是DLL代码(dds.cpp):

 #include "dll.h"

 // #ifdef USE_DLLMAIN
 extern "C" BOOL APIENTRY DllMain(
   HMODULE               hModule,
   DWORD                 ul_reason_for_call,
   LPVOID                lpReserved)
 {
   printf("Hello from DllMain\n");
   return TRUE;
 }
 // #endif


 int STDCALL workhorse()
 {
   printf("Hello from workhorse\n");
   return TRUE;
 }

这是头文件(dll.h):

 #include <windows.h>
 #include <stdio.h>

 #if defined(_WIN32) || defined(__CYGWIN__)
 #    define DLLEXPORT __declspec(dllexport)
 #    define STDCALL __stdcall
 #else
 #    define DLLEXPORT
 #    define STDCALL
 #endif

 #ifdef __cplusplus
 #    define EXTERN_C extern "C"
 #else
 #    define EXTERN_C
 #endif

 EXTERN_C DLLEXPORT int STDCALL workhorse();

这是主程序(dtest.cpp):

 #include "dll.h"

 int main()
 {
   printf("Hello from main\n");

 #ifdef _WIN32
   printf("I'm a _WIN32\n");
 #endif
 #ifdef __CYGWIN__
   printf("I'm a __CYGWIN__\n");
 #endif
 #ifdef __MINGW32__
   printf("I'm a __MINGW32__\n");
 #endif
 #ifdef __cplusplus
   printf("I'm a __cplusplus\n");
 #endif

   printf("Calling workhorse\n");
   printf("ret %d\n", workhorse());

 }

0 个答案:

没有答案