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

时间:2014-05-01 18:49:50

标签: c++ unicode dev-c++

使用

编译程序时,在Dev-C ++中
LPCTSTR ClsName = L"BasicApp";
LPCTSTR WndName = L"A Simple Window";

编译中断,但是当我使用

编译程序时
LPCTSTR ClsName = "BasicApp";
LPCTSTR WndName = "A Simple Window";

成功了;因此,问题是如何以“L'”的方式将unicode-string传递给Orwell Dev-C ++。来自VS ++。

1 个答案:

答案 0 :(得分:5)

请参阅Microsoft有关Working with Strings

的文档

非常接近开头,你可以阅读:

  

要声明宽字符文字或宽字符字符串文字,请将L放在文字之前。

wchar_t a = L'a';
wchar_t *str = L"hello";

(此信息不是Microsoft特定的。它符合C / C ++标准)

然后,如果您查阅评论中引用的documentation 并找到LPCTSTR的条目,您会看到此宏是根据UNICODE的值有条件定义的:

#ifdef UNICODE
    typedef LPCWSTR LPCTSTR; 
#else
    typedef LPCSTR LPCTSTR;
#endif

LPCWSTR的条目告诉您已定义:

typedef CONST WCHAR *LPCWSTR;

条目或LPCSTR告诉您它已定义:

typedef __nullterminated CONST CHAR *LPCSTR;

您正在构建未定义UNICODE的项目。因此,

LPCTSTR ClsName = L"BasicApp";

变为:

__nullterminated CONST CHAR * ClsName = L"BasicApp";

,根据上述定义,涉及使用不兼容的指针类型CONST CHAR *初始化wchar_t *。同样适用于WndName

要纠正此错误,您必须将UNICODE添加到项目的预处理程序定义中。在Orwell Dev-C ++ IDE中,通过导航项目 - >来完成此操作。 项目选项 - >的参数;在标题为 C ++编译器的文本框中输入-DUNICODE,然后输出。 Visual Studio C / C ++项目默认定义UNICODE。 Orwell Dev-C ++没有。

如果要编写可在unicode和ANSI多字节字符集之间移植的字符串文字的定义,则Working with Strings会告诉您如何:读取TCHARS的条目。字符串文字的可移植定义将是:

LPCTSTR ClsName = TEXT("BasicApp");
LPCTSTR WndName = TEXT("A Simple Window");