C DLL の作成とその関数のエクスポートは一般的なタスクです。ただし、エクスポートされた名前がどのように表示されるかを決定するのは混乱する可能性があります。
モジュール定義ファイル (MyDLL.def) を使用して関数をエクスポートする場合、「」のような装飾された名前またはマングルされた名前が表示される場合があります。 SomeFunction@@@23mangledstuff#@@@@"。これは、C コンパイラが C ランタイムに必要な情報を追加することで関数シンボルを修飾するために発生します。
extern "C" __declspec(dllexport) 構文を使用して関数をエクスポートすると、装飾された名前を削除しないでください。関数に C スタイルの名前を付けることを指定するだけですが、装飾は残ります。
問題を軽減するには、プラグマ ディレクティブの使用を検討してください。
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
このプラグマは、指定された装飾名で「SomeFunction」をエクスポートするようにリンカーに指示します。
または、関数本体内で次のプラグマを使用できます。
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
このプラグマは、FUNCTION マクロと FUNCDNAME マクロを使用して、関数名と装飾名を自動で取得します。
これらを利用することでプラグマを使用すると、エクスポートされたシンボルの装飾を制御して、C# などの他の言語から呼び出したときの互換性を確保できます。
以上がC DLL 関数をエクスポートして、装飾された名前や壊れた名前を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。