2011-09-30 42 views
1

szTip字段長度爲128個字符,並且是unicode。它是TCHAR型的,類型定義爲WCHAR。所以我不知道爲什麼下面的代碼片段不能編譯。設置NOTIFYICONDATA結構的szTip字段

nid.szTip = _T("ToolTip"); 

編譯錯誤是

error C2440: '=' : cannot convert from 'const wchar_t [8]' to 'WCHAR [128]' 

有什麼建議?

回答

4

如果您將其分配到TCHAR*,則您的代碼可以正常工作。但是,szTip不是TCHAR*,它被聲明爲TCHAR szTip[64]

所以你需要將字符串的內容複製到緩衝區。就像這樣:

_tcscpy(nid.szTip, _T("ToolTip")); 

你真的需要支持ANSI和Unicode都建立?如果不是,則停止使用TCHAR並切換到Unicode。然後你可以寫一個更可讀的版本。

wcscpy(nid.szTip, L"ToolTip"); 
+0

沒有什麼內在的關於tchar版本的不太可讀......它只是每個人和他們更熟悉的東西,爲什麼不使用它呢? –

+0

FWIW,我見過很多基於TCHAR的代碼,實際上是UNICODE:代碼只用UNICODE API(例如SysAllocString或其他基於COM的API)與TCHARs,這將不能直接編譯,如果它曾經編譯爲ANSI。因此,代碼可能會引起誤解:使用TCHAR表明「此代碼可用作ANSI或UNICODE」(因爲這是TCHAR首先存在的原因)。當然,如果你不在意別人怎麼看待你的代碼,這不是問題。 – BrendanMcK