將 C/C++ 的 DLL 函數匯入 Delphi 時,最常見的問題在於呼叫慣例與名稱修飾。針對 Int xs(char *Id, char *SendData, char *Result) 這類函數,正確的 Delphi 匯入宣告應為:
function xs(Id: PAnsiChar; SendData: PAnsiChar; Result: PAnsiChar): Integer; stdcall; external 'DllName.dll';
extern "C":若 DLL 為 C++ 編譯,編譯器會對函數名進行 Name Mangling,導致 Delphi 找不到符號。在 C++ 標頭檔與實作檔的函數宣告前加上 extern "C" 即可抑制修飾,讓匯出名保持原樣。external 後須為字串常數:external 'DllName.dll' 中的檔名必須是編譯期可解析的常量字串,不可使用變數。| C/C++ 型別 | Delphi 對應型別 | 備註 |
|---|---|---|
| char * | PAnsiChar | Ansi 字串指標,D2009 後建議用 PAnsiChar |
| int | Integer | 32 位有號整數 |
| stdcall | stdcall | 呼叫慣例必須一致 |
UTF8ToAnsi / AnsiToUTF8 轉碼。掌握這兩點,C/C++ DLL 互操作 Delphi 即可事半功倍。