ホームページ >バックエンド開発 >C++ >名前装飾なしで C DLL 関数をエクスポートするにはどうすればよいですか?

名前装飾なしで C DLL 関数をエクスポートするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-27 16:07:14824ブラウズ

How to Export C   DLL Functions without Name Decoration?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。