C:\> csc InvokeDll.cs
Microsoft (R) Visual C# .Net Compiler version 7.10.3052.4
... 生成 InvokeDll.exe
C:\> InvokeDll
40
執行前確保 MyLib.dll 位於可載入路徑(同目錄或 PATH)。
C++ 編譯器預設會對函數名進行名稱修飾(如 ?add@@YAHHH@Z),導致 DllImport 依名稱 "add" 找不到入口點,拋出 EntryPointNotFoundException。
// MyLib.cpp
extern "C" __declspec(dllexport) int add(int a, int b) { return a + b; }
加上 extern "C" 強制使用 C 語言連結慣例,導出名稱即為 "add",C# 即可正確繫結。
extern "C" 時如何透過修飾名稱呼叫?