首頁 > 後端開發 > C++ > 如何匯出 C DLL 函數並避免修飾/損壞名稱?

如何匯出 C DLL 函數並避免修飾/損壞名稱?

Linda Hamilton
發布: 2024-11-13 03:25:02
原創
716 人瀏覽過

How do I Export C   DLL Functions and Avoid Decorated/Mangled Names?

C DLL 匯出:了解修飾/修飾名稱

建立 C DLL 並匯出其函數是一項常見任務。但是,確定匯出名稱的顯示方式可能會令人困惑。

修飾/修飾名稱

使用模組定義檔(MyDLL.def) 匯出函數時,您可能會觀察到修飾或修飾名稱,例如「 SomeFunction@@@23mangledstuff#@@@@ @"。發生這種情況是因為 C 編譯器透過添加 C 運行時所需的資訊來裝飾函數符號。

使用 C 樣式導出

使用 extern "C" __declspec(dllexport) 語法導出函數不會不消除修飾名稱。它僅指定函數應具有 C 風格的名稱,但裝飾保留。

要緩解此問題,請考慮使用 pragma 指令:

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

此編譯指示指示連結器使用指定的修飾名稱匯出「SomeFunction」。

替代解決方案

或者,您可以在函數體內使用以下編譯指示:

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

此編譯指示使用FUNCTIONFUNCDNAME 巨集來自動擷取函數名稱和裝飾名稱。

透過使用這些編譯指示,您可以控制裝飾匯出符號,確保從 C# 等其他語言呼叫它們時的相容性。

以上是如何匯出 C DLL 函數並避免修飾/損壞名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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