首頁  >  文章  >  後端開發  >  如何控制 C DLL 中導出的函數名稱?

如何控制 C DLL 中導出的函數名稱?

Susan Sarandon
Susan Sarandon原創
2024-11-17 12:45:02792瀏覽

How Do I Control Exported Function Names in C   DLLs?

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

在C 中,使用匯出函式建立DLL 時,常會遇到修飾或修飾名稱編譯後的名稱。這些可能會令人困惑,因為它們與預期的未修飾函數名稱不同。

為什麼要使用修飾名稱?

函式名稱的修飾是編譯器使用的一種機制,以確保該函式簽章是唯一的。這在多個函數具有相同名稱但不同參數的情況下尤其重要。裝飾包括有關函數呼叫約定、參數類型和其他屬性的資訊。

模組定義檔與「C」樣式匯出

兩者都使用模組定義檔(.def) 和「C」風格的匯出(extern "C" __declspec(dllexport))可能會導致修飾名稱。這是因為它們都使用底層 Windows PE 格式,而導出函數需要修飾名稱。

刪除修飾名稱

刪除 " 後的修飾名稱=,您可以使用#pragma comment(linker)指令。產生修飾名稱:

#pragma comment(linker, "/EXPORT:SomeFunction=_SomeFunction@@@23mangledstuff#@@@@")
結論

#pragma comment(linker, "/EXPORT:\"" __FUNCTION__ "\"=\"" __FUNCDNAME__ "\"")
修飾名稱是Windows PE 格式的固有部分。 >

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn