首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >:错误字符:'MessageBoxW‘:无法从'const char [40]’转换参数2

:错误字符:'MessageBoxW‘:无法从'const char [40]’转换参数2
EN

Stack Overflow用户
提问于 2010-02-23 01:37:58
回答 4查看 12.9K关注 0票数 2

我正在读一本书,它告诉我打开一个空的WIN32项目。我创建了一个名为main.cpp的源文件,并将其放在源文件夹中(这是我的项目中唯一的文件)。在该文件中放置以下代码:

代码语言:javascript
复制
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine, int nShowCmd)
{
    MessageBox(NULL, "Motoko kusangai has hacked your system!", "Public Security Section 9", MB_OK | MB_ICONEXCLAMATION);
}

然后运行它。但我得到以下错误:

代码语言:javascript
复制
1>c:\users\numerical25\documents\visual studio 2008\projects\begin\begin\main.cpp(6) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [40]' to 'LPCWSTR'
1>        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>Build log was saved at "file://c:\Users\numerical25\Documents\Visual Studio 2008\Projects\Begin\Begin\Debug\BuildLog.htm"
1>Begin - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-23 01:41:50

在这种情况下,您需要使用宽字符串,因为您正在为unicode进行编译。尝试以L作为所有字符串常量的前缀。

代码语言:javascript
复制
MessageBox(
  NULL, 
  L"Motoko kusangai has hacked your system!", 
  L"Public Security Section 9", 
  MB_OK | MB_ICONEXCLAMATION);
票数 9
EN

Stack Overflow用户

发布于 2010-02-23 04:12:18

Petzold的经典编程Windows以关于Unicode的一章开始,我推荐阅读这一章。如果你打算做任何Win32 UI的工作,我会买一本他的书。考虑到Win32如今已经失宠,你可以花不到20美元买到最新的第5版的二手版本。与大多数技术作家不同,查尔斯的风格非常健谈,并使用强大的讲故事技巧,使他的书尽管篇幅很长,但仍具有很强的可读性(他用C#编写Windows程序的效果也很好)。

现在使用unicode字符串是一种很好的做法,但如果你真的不需要它们,你可以进入VS中的项目属性,并将字符集更改为"Use Multi-Byte Character Set",这实际上会让你得到你可能习惯的常规8位ASCII码。

票数 4
EN

Stack Overflow用户

发布于 2010-02-23 01:41:49

试一试

代码语言:javascript
复制
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  LPSTR lpCmdLine, int nShowCmd)
{
    MessageBox(NULL, _T("Motoko kusangai has hacked your system!"), _T("Public Security Section 9"), MB_OK | MB_ICONEXCLAMATION);
}

每次在某些静态文本中出现此错误时,请将这些静态文本括在_T()标记中。

编辑:MS Link

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

https://stackoverflow.com/questions/2312802

复制
相关文章

相似问题

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