0x00 问题描述
在部分操作系统编程中,可能会涉及到LPCWSTR
, DOWRD
, WCHAR
等变量类型,在 Visual Studio
中直接编译会无法通过,比如这样:

如果你是直接copy别人的实验代码,可能连通过编译都困难。
但是DEV C++
或者 mingw-w64
就能很顺畅的编译运行——说明BUG不在程序,大概率在编码
当然,如果你使用了某些VS认为不安全的函数......自行修改函数或者在程序开头加上这句话:
#define _CRT_SECURE_NO_WARNINGS
0x01 解决方案
如果只是上述图片的报错,那么有两种解决方案:改变变量类型、修改编码
改变变量类型:TEXT 宏
TEXT宏的作用是为了对字符处理的透明化:只要在程序中有 unicode 宏的,那么就使用宽字符;否则使用单字节字符,保证程序的可移植性。
使用方法大致如下:
报错的代码:直接将 const char*
隐式转为 const TCHAR*
const TCHAR szFileMappingName[] = "PCFileMappingObject";
const TCHAR szMutexName[] = "PCMutex";
const TCHAR szSemaphoreEmptyName[] = "PCSemaphoreEmpty";
const TCHAR szSemaphoreFullName[] = "PCSemaphoreFull";
正确的代码:使用TEXT()转换
const TCHAR szFileMappingName[] = TEXT("PCFileMappingObject");
const TCHAR szMutexName[] = TEXT("PCMutex");
const TCHAR szSemaphoreEmptyName[] = TEXT("PCSemaphoreEmpty");
const TCHAR szSemaphoreFullName[] = TEXT("PCSemaphoreFull")
改变 VS 字符集
VS的字符集设置在项目属性中:
项目→属性→配置属性→高级→高级属性→字符集→使用多字节字符集

Comments | NOTHING