我在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());
}