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

Delphi 調用 Windows API 核心技巧:數據類型轉換與封裝

     編輯:Delphi

核心挑戰

Windows API 基於 C/C++ 類型 (如 LPSTR、HICON、HWND),Delphi 使用 Pascal 類型 (string、TIcon、THandle),直接調用會類型不匹配,需封裝轉換。

技巧 1:字符串與 PChar 互轉

function GetSysPath: string;
var
  sTmp: string;
begin
  Result := '';
  SetLength(sTmp, 256);               // 預分配緩衝區
  GetSystemDirectory(PChar(sTmp), 256); // API 需 PChar
  SetLength(sTmp, StrLen(PChar(sTmp))); // 截取實際長度
  Result := sTmp + '\';
end;

要點:SetLength 確保緩衝區可寫,PChar(sTmp) 取首字符指針,StrLen 計算以 #0 結尾的長度。

技巧 2:句柄類型封裝

procedure TForm1.ChangeAppIcon;
var
  Icon: TIcon;
begin
  Icon := TIcon.Create;
  try
    // ExtractIcon 返回 HICON (Pointer),賦給 TIcon.Handle
    Icon.Handle := ExtractIcon(Application.Handle, PChar('D:\WINNT\regedit.exe'), 0);
    if Icon.Handle <> 0 then
      Application.Icon := Icon; // TIcon 隱式轉換
  finally
    Icon.Free;
  end;
end;

錯誤寫法:Application.Icon := ExtractIcon(...) 類型不匹配。正確做法:創建中間 TIcon,接收句柄再賦值。

常用類型對照表

最佳實踐

  1. 優先使用 Delphi 封裝單元 (Windows, ShellAPI, CommCtrl)。
  2. 自行聲明 API 時加 stdcall,參數用 const 傳值類型。
  3. 字符串輸出參數:預分配 SetLength,調用後 SetLength(s, StrLen(PChar(s)))。
  4. 結構體對齊:record ... end; 默認按 8 字節對齊,若需 1 字節用 packed record。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
C/C++ 類型Delphi 類型轉換方式
LPSTR/LPCSTRPAnsiChar / PCharPChar(string)
HWNDHWND / THandle直接賦值
HINSTANCEHINST / THandle直接賦值
HICONHICON / THandleTIcon.Handle
HBITMAPHBITMAP / THandleTBitmap.Handle
DWORDDWORD / Cardinal直接賦值
BOOLBOOL / LongBool非零為 True