• 週二. 2 月 17th, 2026

天南訊息

IT 工作者的工作紀錄

WritePrivateProfileStringW 與 dBase 疑難排解

個人頭像照片

By伍芳左

2 月 16, 2026

WritePrivateProfileStringW 是什麼?

它是 Windows 用來管理 .ini 檔案的函式。這類檔案通常長這樣:

Ini, TOML

[SectionName]
KeyName=Value
  • 功能:在指定的「小節」(Section)下,針對特定的「鍵名」(Key),寫入或更新「數值」(Value)。

  • 結尾的 “W”:代表 Wide char (Unicode)。這意味著它支援中文字或特殊字元,使用的是 UTF-16 編碼。

  • 抓出來的資料是什麼?: 如果你是用讀取函式抓出來的,它回傳的是字串(String)。即便你在裡面存的是數字 123,抓出來時它依然是文字 "123",你必須自己在程式裡轉換型別。


2. 為何 dBase 2019 不能用?

dBase 2019(或較新版本的 dBASE PLUS)在處理這類舊式 Windows API 時,通常會遇到以下幾個坑:

A. 宣告與資料型別不匹配

dBase 是透過 DLLArchiveextern 來呼叫 Windows API 的。WritePrivateProfileStringW 期待的是 LPWSTR(指向 Unicode 字串的指標)。

  • 問題:如果你在 dBase 裡傳遞的是普通的字串(ANSI),API 會因為解碼錯誤而失敗,或者找不到檔案。

  • 解法:確保你的 dBase 變數已正確轉換為 Unicode,或者改用 WritePrivateProfileStringA(ANSI 版本)。

B. 權限問題 (UAC)

現代 Windows(自 Windows 7 起)嚴格限制程式寫入 C:\Program FilesC:\Windows 目錄。

  • 問題:如果你嘗試寫入的 INI 檔位在系統保護資料夾,API 會回傳失敗(回傳值為 0)。

  • 解法:將 INI 檔案路徑設定在 AppData 使用者資料夾下。

C. 檔案路徑不完整

API 規定:如果路徑只寫 "config.ini",Windows 會自動去 C:\Windows 找。

  • 問題:dBase 2019 執行環境可能沒有權限存取 Windows 目錄。

  • 解法:必須提供完整絕對路徑,例如 "C:\Users\YourName\Documents\config.ini"


3. 如何在 dBase 中正確診斷?

你可以檢查 API 的回傳值。這類 Windows 函式如果執行成功會回傳「非零值」,失敗則回傳 0

小撇步:如果你只是想在 dBase 2019 儲存設定,不一定要死守這個舊 API。dBase 2019 本身有更現代的類別(例如 INI 類別或直接操作 JSON/SQLite)來處理設定資料,相容性會更好。

個人頭像照片

By 伍芳左

MIS, ERP Pro... RHCE Member (7.2)

發表迴響