在開發-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構建的項目設置。 –