如何定义所有winapi将字符串视为UNICODE?
使用visual studio,有没有办法定义winapi的所有function,将所有字符串视为UNICODE?
您必须为所有Unicode字符串使用L
前缀。 非前缀字符串,例如"hello"
,始终是基于char
的字符串。 语言中没有将此类字符串视为宽字符串的快捷方式。
MS库由宏组织。
- 使用没有appende“A”或“W”的API方法的名称。
- 在_T()宏中包装字符串定义。
通过这种方式,在预处理器中定义“_UNICODE”将构建unicode构建。
CreateFile(_T("C:\out.txt"),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
将恢复到:
// _UNICODE defined CreateFileW(L"C:\out.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
要么
// _UNICODE not defined CreateFileA("C:\out.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
当您将项目设置为针对Unicode进行编译时,所有WinAPI函数都将采用Unicode字符串(如果存在unicode函数等效项)。 但是,当您在C ++中指定字符串文字时,它默认为char *所以为了创建Unicode字符串文字,您需要使用前缀L
指定它们或使用宏_T( "mystring" )
(Visual Studio)
我想您正在寻找:Project-> MyProject Properties-> Configuration Properties。 将字符集设置为使用Unicode字符集 。 这基本上使你的项目成为unicode,现在所有的function都需要unidoe。
确保在如此广泛的更改后仔细检查您的来源。