首頁 > 後端開發 > C++ > 如何導出沒有名稱修飾的 C DLL 函數?

如何導出沒有名稱修飾的 C DLL 函數?

Mary-Kate Olsen
發布: 2024-11-27 16:07:14
原創
873 人瀏覽過

How to Export C   DLL Functions without Name Decoration?

C DLL 修飾名稱匯出

您已經注意到,當使用模組定義(.def) 從C DLL 匯出函數名稱時檔案或C 樣式extern "C" __declspec(dllexport) 語法,導出的函數名稱會以附加資訊進行修飾。這是由於 C 名稱修飾所致,該過程將有關函數參數和類型的信息編碼到函數名稱中。

要刪除此額外的修飾,可以使用 #pragma comment 編譯器指令。透過將以下行加入您的程式碼:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
登入後複製

您可以為要匯出的函數指定修飾名稱。在本例中,「SomeFunction@@@23mangledstuff#@@@@」是函數「SomeFunction」的修飾名稱。

或者,您可以使用以下編譯指示自動產生修飾名稱:

#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ ""= "" __FUNCDNAME__)
登入後複製

此編譯指示使用FUNCTIONFUNCDNAME 宏,用於將函數名稱及其修飾版本插入到編譯指示中。

使用這些編譯指示中的任何一個將在使用dumpbin.exe 檢視時產生以下輸出:

SomeFunction
登入後複製

此方法可讓您保留匯出函數的功能,同時刪除函數名稱中不需要的修飾。

以上是如何導出沒有名稱修飾的 C DLL 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板