WinAPI的数据类型(字符串)

刚开始使用Windows提供的各种API函数时,对于函数参数的类型感到非常的迷惑,实际上Windows中对于各种C++数据类型做了封装和处理,得到了一组Windows的变量类型,其中的部分字符和字符串的定义如下。

其他的类型定义可以在具体使用时搜索查看头文件(例如#include <Windows.h>)或者MSDN。

字符和字符串类型

变量类型 解释 定义
CHAR ANSI型字符 char
WCHAT Unicode型字符 wchar_t
TCHAR 自适应字符(ANSI or Unicode) 可变
LPSTR/PSTR ANSI型字符串 char*
LPWSTR/PWSTR Unicode型字符串 wchar_t*
LPTSTR/PTSTR 自适应字符串(ANSI or Unicode) 可变
LPCSTR/PCSTR 常量ANSI型字符串 const char*
LPCWSTR/PCWSTR 常量Unicode型字符串 const wchar_t*
LPCTSTR/PCTSTR 常量自适应字符串 可变

其中的前缀LP/P,可以理解为表示指针Pointer(字符串变量为字符数组的首地址指针)。

字符串函数

绝大多数操作字符串的函数都提供了A和W两种,例如RegOpenExA()和RegOpenExW(),同时提供了自适应的版本RegOpenEx(),A为后缀的函数参数通常为ANSI型,W为后缀的函数参数通常为Unicode型,无后缀的函数使用自适应定义。

#ifdef UNICODE
#define TCHAR Wchar_t
#else
#define TCHAR char
#endif

#ifdef UNICODE
#define RegOpenEx RegOpenExW
#else
#define RegOpenEx RegOpenExA
#endif

参考MSDN

Lei Yang
Lei Yang
PhD candidate

My research interests include visual speech recognition and semantics segmentation.