[英]char* or LPCWSTR in windows functions
我遵循了有关使用标准windows.h标头创建Windows-Window的教程。
WNDCLASSEX wc;
...
ec.lpszClassName = applicationName;
最初,在编译该文件时,applicationName是一个char *,一切都很好,但是现在我需要重新创建项目(顺便说一下,是MSVC ++),而在我尝试对其进行编译时,它必须是LPCWSTR。 我偶然发现了很多东西,并且想知道为什么它有时接受char *而有时不接受! 我在项目设置中缺少任何东西吗?
顺便说一句:
D3DX11CreateShaderResourceViewFromFile(d3ddevice, filename, NULL, NULL, &m_texture, NULL);
文件名曾经接受char *,但现在不再接受了...
在项目设置的“配置属性->常规”下,有一个名为“字符集”的选项。 将其设置为“使用Unicode字符集”将导致许多Windows API函数接受wchar_t*
而不是char*
。 如果将其设置为“使用多字节字符集”,则API函数将采用char*
而不是wchar_t*
。
MSVC项目具有“ Unicode”属性,您可以打开或关闭。 禁用该选项后,所有Win32函数都将char
用作基本字符类型(因此,期望您传递字符串的函数将需要`const char *)。
启用后, wchar_t
是使用的字符类型。 (因此函数使用const wchar_t*
作为字符串参数)。
该API实际上定义了两个结构WNDCLASSEXA
和WNDCLASSEXW
。 前者使用char
,后者使用wchar_t
。
根据是否启用Unicode(定义_UNICODE
预处理程序宏),其中之一被别名为WNDCLASSEX
。
因此,启用Unicode时, WNDCLASSEX
实际上是WNDCLASSEXW
。
API中处理字符数据的所有其他函数和类型也是如此。 它们都有_A
和_W
变体
如果不想依赖项目属性设置,则可以明确说明要使用的变体:
而不是创建一个的WNDCLASSEX
(可以是两个不同的东西),创建一个WNDCLASSEXW
(它总是使用wchar_t
)。 而不是调用RegisterClass
,而是调用RegisterClassA
或RegisterClassW
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.