首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制转换为LPCWSTR?

强制转换为LPCWSTR?
EN

Stack Overflow用户
提问于 2009-03-20 19:27:42
回答 4查看 7.3K关注 0票数 7

我正在尝试创建一个(非常)简单的LPCWSTR程序,但由于某些原因,编译器(我使用的是VC++ 2008Express)希望我手动将每个字符串或字符*类型转换为Win32:

每次我这样做时,我都会得到这个编译器错误,例如,我得到了"Hello“和”Note“的错误:

错误字符:'MessageBoxW‘:无法将参数2从'const char 22’转换为'LPCWSTR‘

请告诉我,我不需要每次做这件事的时候都选演员。

代码如下:

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, "Hello", "Note", MB_OK);
    return 0;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-20 19:33:20

VS2008中新项目的默认设置是构建支持UNICODE的应用程序。您可以更改该默认设置并返回使用ANSI或MBCS应用程序(属性->配置属性->常规->字符集),或者使用Unicode字符串,如下所示:

代码语言:javascript
复制
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, L"Hello", L"Note", MB_OK);
    return 0;
}

不要将字符串转换为,因为这将导致未定义的行为!char不同于wchar_t!

票数 15
EN

Stack Overflow用户

发布于 2009-03-20 19:31:26

问题是,您是为UNICODE构建的,并且传递的是非Unicode字符串。

尝试:

代码语言:javascript
复制
MessageBox(NULL, L"Hello", L"Note", MB_OK);

或者为ANSI/MBCS设置构建,或者考虑使用TCHAR(这很麻烦)。

票数 1
EN

Stack Overflow用户

发布于 2009-03-20 19:35:37

我对Win32 C编程的记忆很模糊,但我记得,您需要从将字符串包装在这个宏中开始:

_T("mystring")

在构建unicode时,它将被转换为unicode字符串。

如果只生成unicode,或者您确定只处理unicode中的特定字符串,则可以使用L"“标记,这是_T宏在幕后执行的操作。

您可能需要包含tchar.h标头。

在进行win32编程时,我通常将字符串声明为TCHAR * szWhatever,以便在Win9x上几乎和NT/Win2k/XP上一样工作。(还有其他方便的宏,比如LPTSTR等等,MFC包含一些简单的转换宏,用于在ansi和unicode之间转换以调用特定API的情况)。

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

https://stackoverflow.com/questions/667616

复制
相关文章

相似问题

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