首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >windows函数中的char*或LPCWSTR

windows函数中的char*或LPCWSTR
EN

Stack Overflow用户
提问于 2013-06-01 01:12:28
回答 2查看 395关注 0票数 2

我遵循了使用标准windows.h头文件创建Windows - Window的教程。

代码语言:javascript
代码运行次数:0
运行
复制
WNDCLASSEX wc;
...
ec.lpszClassName = applicationName;

刚开始编译这段代码时,applicationName是一个char*,一切都很好,但现在我需要重新创建项目(顺便说一句,是MSVC++),当我试图编译它时,它需要是一个LPCWSTR。我偶然发现了这一点,我很想知道,为什么它有时接受char,有时不接受!?我的项目设置中是否遗漏了什么?

顺便说一下:同样的事情也会发生在

代码语言:javascript
代码运行次数:0
运行
复制
D3DX11CreateShaderResourceViewFromFile(d3ddevice, filename, NULL, NULL, &m_texture, NULL);

filename曾经接受char*,但现在不接受了...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-01 01:16:40

在项目设置的“配置属性->常规”下,有一个名为“字符集”的选项。将其设置为"Use Unicode Character Set“将导致许多Windows API函数接受wchar_t*而不是char*。如果设置为“使用多字节字符集”,则API函数将使用char*而不是wchar_t*

票数 3
EN

Stack Overflow用户

发布于 2013-06-01 01:17:18

MSVC项目有一个"Unicode“属性,您可以将其打开或关闭。当它被关闭时,所有的Win32函数都使用char作为基本字符类型(因此,希望传递字符串的函数将需要一个` `const char*)。

启用时,使用的字符类型为wchar_t。(所以函数使用const wchar_t*作为字符串参数)。

该接口实际上定义了两个结构:WNDCLASSEXAWNDCLASSEXW。前者使用char,后者使用wchar_t

根据是否启用了Unicode (它定义了_UNICODE预处理器宏),其中一个别名为WNDCLASSEX

因此,当启用Unicode时,WNDCLASSEX实际上表示WNDCLASSEXW

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

如果您不希望依赖于项目属性设置,则可以明确说明要使用的变量:

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16862484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档