質問

管理コード付きの管理対象のC ++ DLLでロードリブラリーを希望して、マングルされたextern関数でgetProcaddressを呼び出します。私の質問は、C ++コンパイラの決定論的に取得したマングルされた名前ですか?つまり、元の署名が変更されていない場合は、常に同じマングルネームに変換された名前は?

役に立ちましたか?

解決

標準では指定されていません。コンパイルされたモジュール

GetProcAddressを使用している場合は、関数をextern "C"としてエクスポートするためのFar Cleanerになるため、それらの名前がマングルされていません。

他のヒント

他の人が言ったように、それはコンパイラ固有です。ただし、Agner Fogによって文書の詳細を見つけることができます...

http://www.agner.org/optimize/#manuals

そのページの項目5を参照してください。

また、最近、あなたのために共通のコンパイラのマングリングとデパングリングを処理できるライブラリがあります。Visual C ++の場合、開始点はDBGHELPおよびIMARDHLPライブラリです。

http://msdn.microsoft..com / ja-us / library / MS679292%28V= VS.85%29.aspx

http://msdn.microsoft..com / ja-us / library / MS680321%28V= VS.85%29.ASPX

名前マンゲリングは、すべてのコンパイラによって異なって処理されます(たぶん標準はありません)。C ++コードで純粋なC関数を使用する場合は、extern "c"を使用してC関数の名前マンゲリングをスプレッスすることで、コンパイラがそれらを見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top