在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++的问题。
发布于 2014-05-02 11:27:37
参见微软关于使用Strings的文档
在开始的时候,你可以读到:
若要声明宽字符文字或宽字符字符串文字,请将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;
#endifLPCWSTR的条目告诉您它是定义的:
typedef CONST WCHAR *LPCWSTR;条目或LPCSTR告诉您它是定义的:
typedef __nullterminated CONST CHAR *LPCSTR;您正在构建没有定义UNICODE的项目。相应地,
LPCTSTR ClsName = L"BasicApp";变成:
__nullterminated CONST CHAR * ClsName = L"BasicApp";根据上述定义,它涉及使用不兼容的指针类型wchar_t *初始化一个wchar_t *。WndName也是如此。
要纠正此错误,必须将UNICODE添加到项目的预处理器定义中。在Orwell Dev-C++ IDE中,通过导航Project -> Project Options -> Parameters;在文本框中的C++编译器和OK out中输入-DUNICODE。Visual /C++项目默认定义UNICODE。Orwell Dev-C++没有。
如果您想要编写在unicode和ANSI多字节字符集之间可移植的字符串文字的定义,那么使用Strings将告诉您如何:读取TCHARS的条目。字符串文字的可移植定义如下:
LPCTSTR ClsName = TEXT("BasicApp");
LPCTSTR WndName = TEXT("A Simple Window");https://stackoverflow.com/questions/23414420
复制相似问题