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

Unicode strings in Orwell Dev-C++

本文关键字:字符串 Unicode 中的 Dev-C++ Orwell      更新时间:2023-10-16

在Dev-C++中,当我用编译程序时

LPCTSTR ClsName = L"BasicApp";
LPCTSTR WndName = L"A Simple Window";

编译中断,但当我用编译程序时

LPCTSTR ClsName = "BasicApp";
LPCTSTR WndName = "A Simple Window";

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

请参阅Microsoft关于使用字符串的文档

非常接近这个开始你可以阅读:

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

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

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

然后,如果你查阅了你在评论中引用的文件并找到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";

根据所提到的定义,其涉及初始化具有不兼容指针类型wchar_t *CONST CHAR *。CCD_ 8也是如此。

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

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

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