首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Orwell Dev-C++中的Unicode字符串

Orwell Dev-C++中的Unicode字符串
EN

Stack Overflow用户
提问于 2014-05-01 18:49:49
回答 1查看 1.5K关注 0票数 1

在Dev-C++中,当我用

代码语言:javascript
复制
LPCTSTR ClsName = L"BasicApp";
LPCTSTR WndName = L"A Simple Window";

编译中断,但是当我用

代码语言:javascript
复制
LPCTSTR ClsName = "BasicApp";
LPCTSTR WndName = "A Simple Window";

它成功了;因此,如何以VS++中的“L”方式将unicode-字符串传递给Orwell Dev-C++的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-02 11:27:37

参见微软关于使用Strings的文档

在开始的时候,你可以读到:

若要声明宽字符文字或宽字符字符串文字,请将L放在文字前面.

代码语言:javascript
复制
wchar_t a = L'a';
wchar_t *str = L"hello";

(此信息不是特定于Microsoft的。它与C/C++标准相呼应)

然后,如果您查阅您在注释中引用的文档,并找到LPCTSTR的条目,就会看到这个宏是根据UNICODE的值有条件定义的。

代码语言:javascript
复制
#ifdef UNICODE
    typedef LPCWSTR LPCTSTR; 
#else
    typedef LPCSTR LPCTSTR;
#endif

LPCWSTR的条目告诉您它是定义的:

代码语言:javascript
复制
typedef CONST WCHAR *LPCWSTR;

条目或LPCSTR告诉您它是定义的:

代码语言:javascript
复制
typedef __nullterminated CONST CHAR *LPCSTR;

您正在构建没有定义UNICODE的项目。相应地,

代码语言:javascript
复制
LPCTSTR ClsName = L"BasicApp";

变成:

代码语言:javascript
复制
__nullterminated CONST CHAR * ClsName = L"BasicApp";

根据上述定义,它涉及使用不兼容的指针类型wchar_t *初始化一个wchar_t *WndName也是如此。

要纠正此错误,必须将UNICODE添加到项目的预处理器定义中。在Orwell Dev-C++ IDE中,通过导航Project -> Project Options -> Parameters;在文本框中的C++编译器和OK out中输入-DUNICODE。Visual /C++项目默认定义UNICODE。Orwell Dev-C++没有。

如果您想要编写在unicode和ANSI多字节字符集之间可移植的字符串文字的定义,那么使用Strings将告诉您如何:读取TCHARS的条目。字符串文字的可移植定义如下:

代码语言:javascript
复制
LPCTSTR ClsName = TEXT("BasicApp");
LPCTSTR WndName = TEXT("A Simple Window");
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23414420

复制
相关文章

相似问题

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