C DLL 装飾名のエクスポート
モジュール定義 (.def) のいずれかを使用して C DLL から関数名をエクスポートする場合に気付きました。ファイルまたは C スタイルの extern "C" __declspec(dllexport) 構文では、エクスポートされた関数名は次のように装飾されます。 追加情報。これは、C の名前マングリング (関数のパラメーターと型に関する情報を関数名にエンコードするプロセス) が原因です。
この余分な装飾を削除するには、#pragma comment コンパイラ ディレクティブを使用できます。コードに次の行を追加することで:
#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
エクスポートする関数の装飾名を指定できます。この場合、「SomeFunction@@@23mangledstuff#@@@@」は関数「SomeFunction」の装飾名です。
または、次のプラグマを使用して装飾名を自動的に生成することもできます。
#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ ""= "" __FUNCDNAME__)
このプラグマは FUNCTION を使用し、 FUNCDNAME マクロを使用して、関数名とその装飾バージョンをプラグマに挿入します。
これらのプラグマのいずれかを使用すると、dumpbin.exe で表示すると次の出力が表示されます:
SomeFunction
この方法を使用すると、関数名の不要な装飾を削除しながら、エクスポートされた関数の機能を保持できます。
以上が名前装飾なしで C DLL 関数をエクスポートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。