CUI程序 GUI程序
SAL 语法, 主要是出参, 入参
#define BYTE char*
BYTE a, b; // a是char *, b是char类型
typedef char* BYTE;
BYTE a, b; // a, b都是char*类型
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef DWORD* PDWORD; // 短指针
typedef PDWORD LPWORD; // 长指针, 现在短指针没区别, 为了兼容性, 除此之外还有近指针, 远指针
typedef void* PVOID;
linux所有资源可抽象为file descriptor(fd), 文件句柄
windows所有资源可抽象为HANDLE, 指向内存中的对象
typedef int HANDLE;
typedef HANDLE HMODULE;
typedef HANDLE HINSTANCE;
typedef SYSTEMTIME* PSYSTEMTIME;
typedef PSYSTEMTIME LPSYSTEMTIME;
字符串定义类型
typedef char* PSTR;
typedef PSTR LPSTR;
typedef const char* PCSTR;
typedef PCSTR LPCSTR;
typedef unsigned short wchar_t; // 两个字节的char, 宽字符
typedef wchar_t* PWSTR;
typedef PWSTR LPWSTR;
typedef const wchar_t* PCWSTR;
typedef PCWSTR LPCWSTR;
typedef wchar_t WCHAR; // 微软单独给wchar_t起个别名
char a = 'A'; // 没问题
char a = '张'; // 存取上可能有乱码
wchar_t a = L'张'; // unicode编码, 两个字节
const wchar_t pstr = L"asdf"; // 引号前+L, 这样每个字母占两个字节,
// 有的函数要传入宽字符字符串, 这时可在字符前加L, 例如CreateProcess(), 第一个字符是宽字符
windows上其实不存在CreateProcess
, 这是一个宏, 会根据字符集类型展开, 可在工程里设置字符集, 默认unicode
通过宏定义来指定自定义类型指向字符集
#ifdef UNICODE
#define CreateProcess CreateProcessW
#else
#define CreateProcess CreateProcessA
#endif // !UNICODE
#ifdef UNICODE
#define PCTSTR PCWSTR
#else
#define PCTSTR PCSTR
#endif // !UNICODE
#ifdef UNICODE
#define PTSTR PWSTR
#else
#define PTSTR PSTR
#endif // !UNICODE
#ifdef UNICODE
#define TCHAR wchar_t
#else
#define TCHAR char
#endif // !UNICODE
// TCHAR* 等同于 PTSTR
// 定义UNICODE宏时等同于PWSTR
// 没定义UNICODE宏时等同PSTR
包装
#ifdef UNICODE
#define TEXT(x) L##x // C语言语法, 意思是把它两个连接在一起
#else
#define TEXT(x) x
#endif
#define _T(x) TEXT(x) // 对TEXT进一步进行包装
CreateProcess(_T("HelloWorld"), L"haha"); // 推荐使用包裹性, 而不是直接在字符串前放L, 这样可以根据字符集进行切换
CreateProcess(TEXT("HelloWorld"), L"haha");
使用CreateProcessA时, 操作系统会把字符显示转换为宽字符, 然后再调用CreateProcessW, 为了效率使用CreateProcessW
#ifdef UNICODE
#define _tcslen wcslen
#else
#define _tcslen strlen
#endif // !UNICODE
#ifdef UNICODE
#define tstring std::wstring
#else
#define tstring std::string
#endif // !UNICODE
这样使用tstring兼容两个字符集
atoi("88") = 88;
界面上如果是宽字符则是atoi(L"88")
, 这时这个函数失效, 应使用_wtoi(L"88")
_tstoi(_T("88"))
这么使用则可以根据字符集动态的转换
Ctrl + K + FVS 格式化代码的快捷键
CTR + SHIFT + SPACE 函数提示
原文:https://www.cnblogs.com/hesper/p/10597253.html