首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC++ 產生 DLL 時函式名稱帶底線與 @ 符號的解決方式

     編輯:程式設計綜合問答

VC++ 編譯出的 DLL 函式名稱若出現 _Java_GoodLuck_get@8 這種格式,是因為編譯器預設使用 __stdcall 呼叫約定並進行名稱裝飾(Name Decoration)。這會導致 Java 等無法正確解析裝飾名稱的語言無法呼叫。

解決方法

  • 在函式宣告與定義中加入 extern "C",關閉 C++ 名稱變更。
  • 使用 __declspec(dllexport) 明確匯出符號。
  • 提供 .def 模組定義檔,列出要匯出的函式名稱。
  • 確認呼叫約定與 Java JNI 預期一致,通常 JNI 函式需使用特定命名規則。
extern "C" __declspec(dllexport) JNIEXPORT jint JNICALL Java_GoodLuck_get(...)

這樣匯出的函式名稱將不會額外加上底線與 @ 參數大小標記,方便其他語言呼叫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved