創建了基本的C ++ DLL,并使用模塊定義文件(MyDLL.def)導出了名稱。編譯后,我使用以下命令檢查導出的函數名稱dumpbin.exe :SomeFunction但是我看到的是:SomeFunction = SomeFunction@@@23mangledstuff#@@@@為什么?導出的函數看起來沒有修飾(尤其是與不使用Module Def文件相比),但是其他內容又如何呢?如果我使用dumpbin.exe任何商業應用程序中的DLL進行清潔,那么您都可以:SomeFunction沒什么...我還嘗試了刪除模塊定義,并使用“ C”導出樣式導出名稱,即:extern "C" void __declspec(dllexport) SomeFunction();(僅使用“ extern“ C”不會創建導出函數)但是,這仍會創建相同的輸出,即:SomeFunction = SomeFunction@@@23mangledstuff#@@@@我還嘗試了該#define dllexport __declspec(dllexport)選項,并毫無問題地創建了LIB。但是,我不想為使用C#應用程序中的DLL的用戶提供LIB文件。它是普通的C ++ DLL(非托管代碼),僅使用簡單的標頭和代碼即可使用C ++進行編譯。沒有Module Def,我將無法處理導出的函數(我可以創建一個靜態庫并使用LIB沒問題。我試圖避免這種情況)。如果使用extern "C" __declspec(dllexport) OR或 Module Definition,我得到的似乎是未修飾的函數名稱...唯一的問題是它后面跟有一個“ =”,并且看起來像該函數的修飾版本。我想擺脫“ =”之后的內容-或至少了解其中的原因。就目前而言,我非常確定我可以使用P / Invoke從C#調用該函數...我只是想避免在“ =”末尾出現垃圾。我愿意就如何更改項目/編譯器設置提出建議,但我只是使用了標準的Visual Studio DLL模板-沒什么特別的。
- 3 回答
- 0 關注
- 396 瀏覽
添加回答
舉報
0/150
提交
取消