0

特定のニーズにより、特定の方法で名前が付けられた関数をエクスポートする DLL を作成する必要があり、それも壊れています。

?drawGdi@stop@234@@Z

これを達成する方法はありますか?

4

2 に答える 2

2

それはできますが、DEF ファイルを作成する必要があります。

foo.h:

extern "C" declspec(dllexport) void foo(int);

foo.def:

EXPORTS
    ?drawGdi@stop@234@@Z=_foo

(_fooは関数のエクスポートされた名前です)。

もちろん、DLL をリンクするときに DEF ファイルを指定することを忘れないでください。

詳細については、DEF ファイルに関するドキュメントを参照してください。

于 2013-01-09T15:04:38.140 に答える
1

たとえば、関数を宣言できませんか

 class myclass;
 extern "C" void my_function(int,myclass&);

次に、次のようにエクスポートする必要がありますmy_function(少なくともPosixシステムでは。Windowsでも同じだと思いますが、わかりません)。

GCC でコンパイルする場合は、Asm Labelsを使用できます。その場合、アセンブラが受け入れられる名前は何でも問題ありません。

ELF 実行可能ファイルを備えた Linux では、David Schwartz が提案したように、単純にバイナリ ファイルを編集することはおそらくできませんでした (おそらく、ELF でシンボルに使用されるハッシュ テーブルが壊れてしまうからです)。

于 2013-01-09T14:18:54.517 に答える