繁体   English   中英

Windows函数中的char *或LPCWSTR

[英]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实际上定义了两个结构WNDCLASSEXAWNDCLASSEXW 前者使用char ,后者使用wchar_t

根据是否启用Unicode(定义_UNICODE预处理程序宏),其中之一被别名为WNDCLASSEX

因此,启用Unicode时, WNDCLASSEX实际上是WNDCLASSEXW

API中处理字符数据的所有其他函数和类型也是如此。 它们都有_A_W变体

如果不想依赖项目属性设置,则可以明确说明要使用的变体:

而不是创建一个的WNDCLASSEX (可以是两个不同的东西),创建一个WNDCLASSEXW (它总是使用wchar_t )。 而不是调用RegisterClass ,而是调用RegisterClassARegisterClassW

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM