2016-09-25 12 views
0

DLLから別のDLLにコールを転送しようとしています。私はMinGWでそれを行う方法についてのドキュメントを見つけることができません。MinGWフォワードDLLコール

私は行くだろうビジュアルC++コンパイラを使用:

#pragma comment (linker, "/export:DllInitialize=api.DllInitialize,@2") 

または.DEF定義ファイルを使用してこれらの作業の

EXPORTS 

DllInitialize=api.DllInitialize 

しかし、どれもMINGW32でコンパイルします。私はCode :: BlocksをIDEとして使用しています。 MinGW32でこれをどうすればできますか?ここ

答えて

0

は、あなたがそれを行うことができる方法である:「drectve」タイプミスではないことを

#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 

注意、それが見えるかもしれませんが奇数書き込まなければならないかのthats。ちなみに、この奇妙な略語はマイクロソフトの考えであり、GCCのものではありません。

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) 

は、あなたのアイデアを得る

関連する問題