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 是透過 DLLArchive 或 extern 來呼叫 Windows API 的。WritePrivateProfileStringW 期待的是 LPWSTR(指向 Unicode 字串的指標)。
-
問題:如果你在 dBase 裡傳遞的是普通的字串(ANSI),API 會因為解碼錯誤而失敗,或者找不到檔案。
-
解法:確保你的 dBase 變數已正確轉換為 Unicode,或者改用
WritePrivateProfileStringA(ANSI 版本)。
B. 權限問題 (UAC)
現代 Windows(自 Windows 7 起)嚴格限制程式寫入 C:\Program Files 或 C:\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)來處理設定資料,相容性會更好。