2012-12-28 79 views
3

我試圖在MFC應用程序中使用listbox.Addstring();,這將花費LPCTSTR。 我正在傳遞一個長度爲33個字符的變量char無法將char [33]轉換爲LPCTSTR,或者如果我轉換爲LPCTSTR所需的結果沒有得到

ListBox.AddString(Adapter_List->pScanList->network[0].szSsid); 

SzSsidchar szSsid[33];

我面臨兩個問題聲明:

1)如果我強制轉換爲LPCTSTR

ListBox.AddString((LPCTSTR) Adapter_List->pScanList->network[0].szSsid); 

,我沒有得到正確的輸出 - 有一些漢字顯示。我知道這是一個unicode問題,但我不懂unicode。

2),如果我不強制轉換我得到一個錯誤

無法轉換的char [33]到LPCTSTR

我想建立一個MFC應用程序,它會顯示所有的接入點。在szSsid我能夠看到接入點名稱。

+1

你可以把'szSsid'作爲'wchar_t [33]'(或者適合兩個'TCHAR [33]')嗎? – chris

+0

@chris沒有用處,我仍然看到中國的字符串和空的領域。 – david

回答

4

LPCTSTR type-casting是錯誤的。您可能需要使用ATL conversion helperCA2Tchar字符串轉換爲TCHARLPCTSTR)字符串或CA2W轉換從char字符串爲Unicode UTF-16 wchar_t串;例如: -

// CA2T - Uses the TCHAR model (obsolete) 
ListBox.AddString(CA2T(Adapter_List->pScanList->network[0].szSsid)); 

或:

// CA2W - Conversion to Unicode UTF-16 (wchar_t) string 
// More modern approach. 
ListBox.AddString(CA2W(Adapter_List->pScanList->network[0].szSsid)); 

但是,更重要的,什麼是編碼由您char szSSid[]字符串?您可能希望將編碼標識符(例如對於UTF-8字符串的CP_UTF8)指定爲CA2W constructor nCodePage parameter,以正確轉換爲傳遞給AddString()方法的Unicode UTF-16字符串。

+0

謝謝,我會檢查。如何知道字符串使用的編碼? – david

+0

謝謝Mr.C64,我試圖改變項目設置。配置屬性 - >通用 - >項目默認值 - >字符集默認使用unicode字符集。我更改爲未設置或多字節字符集的工作。我不完全知道unicode字符串,我嘗試了線索和錯誤。可能是Mr.C64解決方案更好地深入瞭解 – david

+0

'char szSSid []'字符串使用的編碼應記錄在代碼的某處或您的項目文檔中......我沒有通靈的力量去猜測它: )它可能是簡單的ASCII或Unicode UTF-8或其他編碼...您可以嘗試簡單地調用「CA2W」而不指定編碼,並查看結果。也許默認是OK。或者,您可以從[此列表](http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v = vs.85).aspx)指定一些特殊編碼。 –