3

我正在尝试listbox.Addstring();在 MFC 应用程序中使用LPCTSTR. 我正在传递一个长度为char33 个字符的数组变量。

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

SzSsid被声明为char szSsid[33];

我面临两个问题:

1)如果我打字LPCTSTR喜欢

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

我没有得到正确的输出 - 显示了一些中文字符。我知道这是一些 unicode 问题,但我不了解 unicode。

2)如果我不进行类型转换,我会收到错误

无法将 char[33] 转换为 LPCTSTR

我正在尝试构建一个将显示所有接入点的 MFC 应用程序。在szSsid我能够看到接入点名称。

4

1 回答 1

4

LPCTSTR类型转换是错误的。您可能想要使用ATL 转换助手,例如CA2Tchar字符串转换为TCHAR( LPCTSTR) 字符串,或CA2Wchar字符串转换为 Unicode UTF-16wchar_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[]您可能希望将编码标识符(例如CP_UTF8对于 UTF-8 字符串)指定为CA2W构造函数nCodePage参数,以便正确转换为传递给AddString()方法的 Unicode UTF-16 字符串。

于 2012-12-28T11:50:13.907 回答