2012-02-14 6 views
4

dllでエクスポートする必要があるクラスの関数の周りの装飾を取り除く方法を知りたいと思います。たとえば、ときにこのようなものがあります:関数の装飾なしでdllのクラスをエクスポートする

extern "C" 
{ 
    __declspec(dllexport) int __cdecl getWhatever(); 
} 

をそして、あなたはdependencyWalker、エクスポートされた関数の名前を確認することを、あなたは正確に同じ関数名を持つことになります。

しかし、あなたはクラスと似た何かをしている場合、このような関数装飾文字の束があるでしょう:

extern "C" 
{ 

    class __declspec(dllexport) Toto 
    { 
    __cdecl Toto(){} 
    __cdecl ~Toto(){} 

    int __cdecl getBlob(float y){return (int)y;} 
    }; 

} 

dependencyWalkerではあなたがこれを表示されます。

?? 0Totoを@@ AAEの@ XZ

?? 1Toto @@ AAE @ XZ

?? 4Toto @@ QAEAAV0 @ ABV0 @@ Z

?getBlob @ Toto @@ AAAHM @ Z

手続き関数のようにきれいにするには?あなたはC++のクラスのネーム・マングリングを無効にすることはできませんし、あなたがマングリングせずにそれらをエクスポートすることはできません

答えて

5

おかげで、。 C++クラスは、マングリングを必要とする機能をサポートしています。たとえば、関数のオーバーロード。

マングリングはコンパイラ固有のものであることにも注意してください。したがって、異なるコンパイラや異なる言語を使用しているユーザーがクラスにアクセスできるようにするには、DLLからC++クラスをエクスポートすることが設計上の選択肢になりません。

+0

ありがとう、私は探しますそれ。 – millionDollahSmile

関連する問題