在开发-C++,当我编译我的程序与Unicode字符串
LPCTSTR ClsName = L"BasicApp";
LPCTSTR WndName = L"A Simple Window";
编译休息,但是当我编译我的程序与
LPCTSTR ClsName = "BasicApp";
LPCTSTR WndName = "A Simple Window";
它成功;因此问题是如何以VS ++的'L'的方式将unicode字符串传递给Orwell Dev-C++。
在开发-C++,当我编译我的程序与Unicode字符串
LPCTSTR ClsName = L"BasicApp";
LPCTSTR WndName = L"A Simple Window";
编译休息,但是当我编译我的程序与
LPCTSTR ClsName = "BasicApp";
LPCTSTR WndName = "A Simple Window";
它成功;因此问题是如何以VS ++的'L'的方式将unicode字符串传递给Orwell Dev-C++。
请参阅微软的文档约Working with Strings
非常接近的这个开始,你可以阅读:
要声明一个宽字符常量或宽字符串文字,把前l文字。
wchar_t a = L'a';
wchar_t *str = L"hello";
(此信息是不是微软特有的,它相呼应的C/C++标准),如果您咨询您在您的评论 都引用了documentation,并找到LPCTSTR
进入
然后你看到这个宏时的UNICODE
值有条件地定义为:
#ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif
为入口告诉你它的定义:
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中,通过浏览项目→项目选项→参数;在的文本框中输入-DUNICODE
C++编译器并确定。 Visual Studio C/C++项目默认定义UNICODE
。 Orwell Dev-C++没有。
如果要编写在unicode和ANSI多字节字符集之间可移植的字符串文字的定义,则Working with Strings会告诉您如何:读取TCHARS
的条目。您的字符串文字的便携式定义将是:
LPCTSTR ClsName = TEXT("BasicApp");
LPCTSTR WndName = TEXT("A Simple Window");
_“编译中断”_是一个非常模糊的描述,它究竟如何中断? ] –
[错误]无法在初始化中将'const wchar_t *'转换为'LPCTSTR {aka const char *}' – Starhowl
您需要更改要为Unicode构建的项目设置。 –