2014-05-01 184 views
1

在开发-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++。

+1

_“编译中断”_是一个非常模糊的描述,它究竟如何中断? ] –

+0

[错误]无法在初始化中将'const wchar_t *'转换为'LPCTSTR {aka const char *}' – Starhowl

+2

您需要更改要为Unicode构建的项目设置。 –

回答

5

请参阅微软的文档约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");