C DLL 関数をエクスポートして、装飾された名前や壊れた名前を回避するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-13 03:25:02
オリジナル
642 人が閲覧しました

How do I Export C   DLL Functions and Avoid Decorated/Mangled Names?

C DLL のエクスポート: 装飾名/修飾名について理解する

C DLL の作成とその関数のエクスポートは一般的なタスクです。ただし、エクスポートされた名前がどのように表示されるかを決定するのは混乱する可能性があります。

装飾された名前/マングルされた名前

モジュール定義ファイル (MyDLL.def) を使用して関数をエクスポートする場合、「」のような装飾された名前またはマングルされた名前が表示される場合があります。 SomeFunction@@@23mangledstuff#@@@@"。これは、C コンパイラが 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート