我正在尝试将调用从我的DLL转发到另一个DLL。我找不到任何关于如何使用MinGW的文档。
使用Visual C ++编译器我会选择:
#pragma comment (linker, "/export:DllInitialize=api.DllInitialize,@2")
或者使用.def定义文件:
EXPORTS
DllInitialize=api.DllInitialize
但是在使用MinGW32编译时,这些都不起作用。如果重要的话,我使用Code :: Blocks作为IDE。我怎么能用MinGW32做到这一点?
答案 0 :(得分:1)
对不起,我在上面的代码中添加了太多的双引号。相反它应该是这样的:
asm (".section .drectve\n\t.ascii \" -export:DllInitialize=api.DllInitialize @2\"");
如果您需要多次使用它,请考虑将其放在宏中,例如
#ifdef _MSC_VER
#define FORWARDED_EXPORT_WITH_ORDINAL(exp_name, ordinal, target_name) __pragma (comment (linker, "/export:" #exp_name "=" #target_name ",@" #ordinal))
#endif
#ifdef __GNUC__
#define FORWARDED_EXPORT_WITH_ORDINAL(exp_name, ordinal, target_name) asm (".section .drectve\n\t.ascii \" -export:" #exp_name "= " #target_name " @" #ordinal "\"");
#endif
FORWARDED_EXPORT_WITH_ORDINAL(DllInitialize, 2, api.DllInitialize)
FORWARDED_EXPORT_WITH_ORDINAL(my_create_file_a, 100, kernel32.CreateFileA)
你明白了
答案 1 :(得分:0)
这是你如何做到的:
#ifdef _MSC_VER
#pragma comment (linker, "/export:DllInitialize=api.DllInitialize,@2")
#endif
#ifdef __GNUC__
asm (".section .drectve\n\t.ascii \" -export:\\\"DllInitialize=api.DllInitialize\\\" @2\"");
#endif
请注意,“drectve”不是一个拼写错误,这就是它必须如何写,但看起来有点奇怪。顺便说一句,这个奇怪的缩写是微软的想法,而不是GCC的。