如何定义所有winapi以将字符串视为UNICODE?

如何定义所有winapi以将字符串视为UNICODE?,c,winapi,C,Winapi,使用visual studio,是否有方法定义winapi的所有函数以将所有字符串视为UNICODE?您必须为所有UNICODE字符串使用L前缀。无前缀字符串,例如“hello”,始终是基于字符的字符串。该语言中没有将此类字符串视为宽字符串的快捷方式。您必须为所有Unicode字符串使用L前缀。无前缀字符串,例如“hello”,始终是基于字符的字符串。该语言中没有将此类字符串视为宽字符串的快捷方式。当您将项目设置为针对Unicode编译时,所有WinAPI函数都将采用Unicode字符串(如果存

使用visual studio,是否有方法定义winapi的所有函数以将所有字符串视为UNICODE?

您必须为所有UNICODE字符串使用
L
前缀。无前缀字符串,例如
“hello”
,始终是基于
字符的字符串。该语言中没有将此类字符串视为宽字符串的快捷方式。

您必须为所有Unicode字符串使用
L
前缀。无前缀字符串,例如
“hello”
,始终是基于
字符的字符串。该语言中没有将此类字符串视为宽字符串的快捷方式。

当您将项目设置为针对Unicode编译时,所有WinAPI函数都将采用Unicode字符串(如果存在Unicode函数等价物)。但是,当您在C++中指定字符串文本时,默认为char *,因此,为了创建Unicode字符串文字,您需要用前缀<代码> L>代码>或使用宏<代码> >(“MyString”)< /Code >(VisualStudio)

< P>当您为Unicode设置项目时,所有WiAPI函数将采用Unicode字符串。但是,如果在C++中指定字符串文本,则默认为char *。因此,为了创建Unicode字符串文字,您需要用前缀<代码> L>代码>或使用宏>代码>(t)(“MyString”)< /Code >(VisualStudio)

< P> MS库由宏组织。
  • 使用不带附录“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);


MS库由宏组织

  • 使用不带附录“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);


我想您正在寻找以下内容:Project->MyProject Properties->Configuration Properties。将字符集设置为使用Unicode字符集。这基本上使您的项目成为Unicode项目,并且所有函数现在都希望使用unidoe


在进行了如此广泛的更改之后,请务必仔细检查源代码。

我认为您正在寻找以下内容:Project->MyProject Properties->Configuration Properties。将字符集设置为使用Unicode字符集。这基本上使您的项目成为Unicode项目,并且所有函数现在都希望使用Unicode


在进行了如此广泛的更改后,请确保仔细检查源代码。

\u T
只有在您打算构建ANSI版本的代码时才有意义。而且,只有当您需要以Windows 9x为目标时,这才有意义。否则,您的代码将变得相当不可读。我通常也会使用L,但如果您使用L,您也应该使用W后缀。定义
\u UNICODE
,使用
L
而不使用
W
前缀,只将Win32视为UNICODE API,这是非常好的。如果您在同基因基础设施中工作,并且没有为实用程序执行任何inheader实现…
\u T
只有在您打算构建NSI版本的代码。只有当您需要以Windows 9x为目标时,这才有意义。否则,您的代码将变得相当不可读。我通常也会使用L,但如果您使用L,您也应该使用W后缀。定义
\u UNICODE
,使用
L
,而不使用
W
前缀,这是非常好的32作为Unicode API。如果您在同基因基础设施中工作,并且没有为实用程序执行任何inheader实现,那么这是非常好的……Windows API无法将字符串转换为Unicode。您必须声明它们为wchar\u t[],而不是char[]。Windows API无法将字符串转换为Unicode。您必须将其声明为wchar\u t[],而不是char[]。