簡體   English   中英

從 C++ DLL 獲取函數名稱

[英]Get functions mangled name from C++ DLL

我有 function 聲明為__declspec(dllexport) void TakeInput();

The DLL which has this function is exported in C#.I am getting failure while executing function call to this function as entry point not found in c# code.

谷歌搜索顯示問題是沒有提供正確的入口點。我需要為此 function 提供錯誤名稱。

所以我想知道我怎樣才能得到這個 function 的損壞名稱?

為了避免名稱混淆,請使用extern "C"

extern "C" __declspec(dllexport) void TakeInput();

更多閱讀:使用外部指定鏈接

您可以使用 DependancyWalker (http://www.dependencywalker.com) 或其他列出 DLL 導出的工具來獲取損壞的名稱,但您最好按照 Armen 的建議進行操作。

我建議不要嘗試計算損壞的名稱,而是只導出未損壞的名稱。 這樣做,你需要做兩件事:

  1. 通過使用 function 的 C 鏈接來禁用 C++ 名稱修改您可以使用extern "C"來執行此操作。

  2. 確保您的 function 使用 C 調用約定。 這是默認值(至少在 Microsoft Visual Studio 中),但可以使用/Gr (切換__fastcall調用約定)和/Gz (切換__stdcall調用約定)命令行開關更改此默認值。 您可以使用__cdecl執行 C 調用約定,如下所示:

總而言之,要確保您的 function 導出為TakeInput ,請使用:

extern "C" __declspec(dllexport) void __cdecl TakeInput();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM