首頁 > 後端開發 > C++ > 如何控制 C DLL 中的導出函數名稱:修飾與未修飾?

如何控制 C DLL 中的導出函數名稱:修飾與未修飾?

Patricia Arquette
發布: 2024-11-17 01:32:03
原創
731 人瀏覽過

How to Control Exported Function Names in C   DLLs: Decorated vs. Undecorated?

C DLL 匯出:修飾與未修飾的名稱

從C DLL 匯出函數時,您可能會遇到修飾(損壞)的名稱。此行為是由編譯器用於解析 C 中符號名稱的名稱修飾機制所引起的。

模組定義檔 (.def)

使用模組定義檔時,您明確指定匯出函數的名稱。但是,編譯器仍然會為導出的符號名稱添加修飾後綴。這是函數名稱的變形版本,其中包括有關函數參數、傳回類型和其他詳細資訊的資訊。

extern "C" Export

匯出函式使用「extern「C」」語法可防止編譯器對函式名稱進行名稱修改。但是,它不會刪除“=”之後的附加後綴。

Pragma Comment

明確匯出函數的另一種方法是使用 #pragma comment 連結器指示。該指令允許您指定要匯出的修飾函數名稱。例如:

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

此指令指示連結器使用提供的修飾名稱匯出「SomeFunction」函數。

FUNCTION 巨集

另一個選擇是使用函數體內的 FUNCTION 巨集。此巨集擴展為未修飾的函數名稱。然後,您可以使用 pragma comment 指令匯出具有修飾名稱的函數,如下所示:

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

此技術可讓您指定修飾名稱而無需明確指定它。

透過採用這些方法中的任何一種,您都可以控制匯出的函數名稱,並避免使用.def 檔案或「extern “C””時可能出現的不需要的“=”和修飾後綴。文法.

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

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