2012-02-14 50 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 @@ž

?getBlob @ Toto @@ AAAHM @ Z

那麼如何使它像過程函數一樣乾淨呢?

感謝,

回答

5

您不能禁用名稱重整的C++類,你不能沒有重整出口。 C++類支持需要修改的功能。例如,函數重載。

還值得注意的是,mangling是編譯器特有的。所以如果你希望你的類對於使用不同編譯器甚至不同語言的人來說是可訪問的,那麼從DLL中導出C++類是一個糟糕的設計選擇。

+0

謝謝你,我會尋找那。 – millionDollahSmile 2012-02-15 18:10:38

相關問題