无法将char [33]转换为LPCTSTR,或者如果我将LPCTSTR转换为LPCTSTR所需的结果

时间:2012-12-28 11:34:33

标签: c++ c visual-c++ mfc wchar-t

我想在MFC应用程序中使用listbox.Addstring();,这将需要LPCTSTR。 我传递的变量为char数组,其长度为33个字符。

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中,我可以看到接入点名称。

1 个答案:

答案 0 :(得分:4)

LPCTSTR类型转换是错误的。您可能希望使用CA2T charTCHAR字符串转换为LPCTSTRCA2W)字符串,或char转换为wchar_t {1}字符串到Unicode UTF-16 // 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字符串AddString())指定为ATL conversion helper,以便正确转换为传递给{{1}}方法的Unicode UTF-16字符串。