第一次课

自定义别名

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"))这么使用则可以根据字符集动态的转换

vs快捷键

Ctrl + K + FVS 格式化代码的快捷键

CTR + SHIFT + SPACE 函数提示

转载于:https://www.cnblogs.com/hesper/p/10597253.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值