最簡單但需部署額外 DLL,不屬本文深度討論範圍。
適用於 C 基礎扎實者。核心差異在函數宣告順序(返回型別前置)與無返回值用 void:
| Delphi | C/C++ |
|---|---|
function MyFunction(intIN: Integer): Boolean; | BOOL MyFunction(int intIN); |
procedure MyProcedure; | void MyProcedure(); |
| C 型別 | Delphi 型別 |
|---|---|
| BOOL | Boolean / LongBool |
| CHAR / CHAR* | Char / PAnsiChar |
| INT / LONG / LONGINT | Integer / LongInt |
| DWORD / ULONG | LongWord / Cardinal |
| FLOAT / DOUBLE | Single / Double |
| HANDLE / HWND / HINSTANCE | THandle / HWND / HINST |
| LPSTR / LPCSTR | PAnsiChar |
| LPWSTR / LPCWSTR | PWideChar |
| POINT / RECT | TPoint / TRect |
| SIZE | TSize |
| VOID* | Pointer |
| WORD / UINT / UNSIGNED | Word |
| SHORT / SHORTINT | SmallInt |
| BYTE / UNSIGNED CHAR | Byte |
結構體需逐欄位對應,注意對齊(#pragma pack / packed record)。
cdecl 呼叫慣例,並以 extern "C" 防止名稱修飾。C 標頭(DatFormat.h):
extern BOOL CheckIsDatFile(const char* FileName, BOOL* IsDatFile);
C 實作(DatFormat.c):讀檔頭 4 字節檢查 RIFF 簽名,使用 Win32 API CreateFile/ReadFile/CloseHandle。
編譯生成 DatFormat.obj。
.obj 複製至專案目錄。implementation 區加入指令:{$LINK 'DatFormat.obj'}cdecl):
function _CheckIsDatFile(const FileName: PAnsiChar; IsDatFile: PBoolean): Boolean; cdecl; external;
var IsDatFile: Boolean;
if _CheckIsDatFile(PAnsiChar(OpenDialog1.FileName), @IsDatFile) then
if IsDatFile then ShowMessage('是 DAT 格式') else ShowMessage('非 DAT 格式')
else ShowMessage('讀取失敗');
Add to Project 選擇 *.pas。.hpp 標頭檔。#include "UnitName.hpp" 後直接呼叫 Delphi 函數(如 My_GetBiosPassword())。