使用
编译程序时,在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 ++。
答案 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");