VC++ 編譯 DLL,OD 反組譯顯示導出函數 A+B 參數消失,呼叫時彈出錯誤。
__declspec(dllexport) 導出 C++ 函數,呼叫端需完全相同的編譯器版本、呼叫慣例、結構對齊才能正確連結。; MyDll.def
LIBRARY "MyDll"
EXPORTS
AddNumbers @1 ; 導出名稱固定為 AddNumbers,無修飾
專案屬性 → Linker → Input → Module Definition File → MyDll.def。
// MyDll.h
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
extern "C" MYDLL_API int __stdcall AddNumbers(int a, int b);
extern "C" 禁用 C++ 名稱修飾。__stdcall 統一呼叫慣例(Windows API 標準)。dumpbin /exports MyDll.dll
輸出應顯示清晰的 AddNumbers 而非修飾後的 ?AddNumbers@@YGHHH@Z。
extern "C"),內部實作可用 C++。.h、.lib、.dll 三件套給呼叫端。