2014-05-01 224 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");