Добавление значений std::string в CListBox заканчивается как gbberish
ОК, что не так с этим?
void CMFCApplication1Dlg::OnBnClickedOk()
{
std::vector<std::string> vectorList;
try
{
CMSAToolsLibraryWrapper wrapper;
__int64 lResult = wrapper.SetDatabasePath(std::string("d:\\Test.xml"));
__int64 iNumPublishersRead = 0;
if (wrapper.ReadPublisherData(iNumPublishersRead))
{
vectorList = wrapper.GetPersonnelNames(true);
for (std::string& strName : vectorList)
{
m_lbNames.AddString((LPCTSTR)strName.c_str());
}
}
}
catch(_com_error *e)
{
AfxMessageBox(_T("Problem"));
}
//CDialogEx::OnOK();
}
Если я установлю точку останова на AddString
позвонить strName
значение верное. Но мой CListBox
заканчивается китайскими иероглифами. Зачем?
2 ответа
Решение
Вы отправляете char
Строки для функции, которая требует wchar_t
строки. (LPCTSTR)
cast маскирует сообщение об ошибке, которое сообщит вам, что случилось.
Это работает:
void CMFCApplication1Dlg::OnBnClickedOk()
{
std::vector<std::string> vectorList;
try
{
CMSAToolsLibraryWrapper wrapper;
__int64 lResult = wrapper.SetDatabasePath(std::string("d:\\Test.xml"));
__int64 iNumPublishersRead = 0;
if (wrapper.ReadPublisherData(iNumPublishersRead))
{
vectorList = wrapper.GetPersonnelNames(true);
for (std::string& strName : vectorList)
{
CString strName2(strName.c_str());
m_lbNames.AddString(strName2);
}
UpdateData(FALSE);
}
}
catch(_com_error *e)
{
AfxMessageBox(_T("Problem"));
}
}
Ввод std::string
в CString
сначала, а затем передать это с AddString
работает.