函數原型的慣例

Windows SDK 提供泛型、 Windows 字碼頁Unicode 版本的函式原型。 原型可以編譯為產生 Windows 字碼頁原型或 Unicode 原型。 本主題中會討論這三個原型,並由 SetWindowText 函式的程式碼範例加以說明。

以下是泛用原型的範例。

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

標頭檔提供了實作成巨集的泛用函數名稱。

#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE

預處理器會將宏展開至 Windows 字碼頁或 Unicode 函式名稱。 ANSI) 或 「W (」 (Unicode) 的字母 「A」 會視需要新增在泛型函式名稱的結尾。 標頭檔接著會提供兩個特定的原型,一個用於 Windows 字碼頁,另一個用於 Unicode,如下列範例所示。

BOOL SetWindowTextA(
  HWND hwnd,
  LPCSTR lpText
);
BOOL SetWindowTextW(
  HWND hwnd,
  LPCWSTR lpText
);

適用于字串的 Windows 資料類型中所述,泛型函式原型會使用文字參數的資料類型 LPCTSTR。 不過,Windows 字碼頁原型是使用 LPCSTR 類型,而 Unicode 原型則使用 LPCWSTR。

凡是具有文字引數的任何函數,應用程式通常都應使用泛用函數原型。 如果應用程式在標頭檔 #include 語句之前或編譯期間定義 「UNICODE」,語句將會編譯成 Unicode 函式。

注意

新的 Windows 應用程式應該使用 Unicode 來避免不同字碼頁的不一致,並方便當地語系化。 它們應該以泛型函式撰寫,而且應該定義 UNICODE,以將函式編譯成 Unicode 函式。 在應用程式必須使用 8 位字元資料的地方,它可以明確使用 Windows 字碼頁的函式。

 

您的應用程式應該一律使用泛用函數原型搭配泛用字串和字元類型。 名稱以大寫 "W" 結尾的所有函數都是採用 Unicode (即寬字元) 參數。 某些函式只存在於 Unicode 版本中,而且只能與適當的資料類型搭配使用。 例如, LCIDToLocaleNameLocaleNameToLCID 只有 Unicode 版本。

每個 Unicode 和字元集函式參考檔中的需求一節提供受支援作業系統所實作之函式版本的相關資訊。 如果包含開頭為 「Unicode」 的行,函式就會有個別的 Unicode 和 Windows 字碼頁版本。

注意

當函式具有字元字串的 length 參數時,長度應該記錄為字串中的 TCHAR 值計數。 此資料類型是指函式的 Windows 字碼頁版本位元組,或 Unicode 版本的 16 位字組。 不過,需要或傳回不具型別記憶體區塊指標的函式,例如 GlobalAlloc 函式,通常會採用位元組大小,而不論所使用的原型為何。 如果不具類型的記憶體配置適用于字串,則應用程式必須將字元數乘以大小of (TCHAR) 。 如需詳細資訊,請參閱 使用泛型資料類型

 

Windows API 中的 Unicode