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

Delphi 整合 C/C++ 程式碼三大策略:DLL、OBJ 靜態鏈接與型別對照表

     編輯:Delphi

策略一:編譯 C 為 DLL 動態呼叫

最簡單但需部署額外 DLL,不屬本文深度討論範圍。

策略二:C 原始碼手動移植為 Delphi

適用於 C 基礎扎實者。核心差異在函數宣告順序(返回型別前置)與無返回值用 void:

DelphiC/C++
function MyFunction(intIN: Integer): Boolean;BOOL MyFunction(int intIN);
procedure MyProcedure;void MyProcedure();

核心型別對照表(節錄常用)

C 型別Delphi 型別
BOOLBoolean / LongBool
CHAR / CHAR*Char / PAnsiChar
INT / LONG / LONGINTInteger / LongInt
DWORD / ULONGLongWord / Cardinal
FLOAT / DOUBLESingle / Double
HANDLE / HWND / HINSTANCETHandle / HWND / HINST
LPSTR / LPCSTRPAnsiChar
LPWSTR / LPCWSTRPWideChar
POINT / RECTTPoint / TRect
SIZETSize
VOID*Pointer
WORD / UINT / UNSIGNEDWord
SHORT / SHORTINTSmallInt
BYTE / UNSIGNED CHARByte

結構體需逐欄位對應,注意對齊(#pragma pack / packed record)。

策略三:靜態鏈接 C 編譯產出的 OBJ 檔(推薦無外部相依)

前置條件

  • 使用 Borland C++ Compiler (BCC) 或免費命令列工具產出 OMF 格式 OBJ(MSVC 產出 COFF 格式不可直接鏈接)。
  • C 函數採 cdecl 呼叫慣例,並以 extern "C" 防止名稱修飾。

範例:判斷 VCD DAT 檔案格式

C 標頭(DatFormat.h):

extern BOOL CheckIsDatFile(const char* FileName, BOOL* IsDatFile);

C 實作(DatFormat.c):讀檔頭 4 字節檢查 RIFF 簽名,使用 Win32 API CreateFile/ReadFile/CloseHandle。

編譯生成 DatFormat.obj。

Delphi 專案整合步驟

  1. 將 .obj 複製至專案目錄。
  2. 在 implementation 區加入指令:{$LINK 'DatFormat.obj'}
  3. 宣告外部函數(注意前綴底線與 cdecl):
    function _CheckIsDatFile(const FileName: PAnsiChar; IsDatFile: PBoolean): Boolean; cdecl; external;
  4. 呼叫範例:
    var IsDatFile: Boolean;
    if _CheckIsDatFile(PAnsiChar(OpenDialog1.FileName), @IsDatFile) then
      if IsDatFile then ShowMessage('是 DAT 格式') else ShowMessage('非 DAT 格式')
    else ShowMessage('讀取失敗');

延伸:C++Builder 直接引用 Delphi 單元

  1. C++Builder 專案 Add to Project 選擇 *.pas。
  2. Build 產生 .hpp 標頭檔。
  3. #include "UnitName.hpp" 後直接呼叫 Delphi 函數(如 My_GetBiosPassword())。

總結建議

  • 追求零外部檔案部署 → OBJ 靜態鏈接。
  • 需跨語言共享邏輯、頻繁更新 → DLL。
  • 團隊具備雙語言能力 → 手動移植 維護單一代碼庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved