将 std::string 值添加到 CListBox 最终变成乱码
Adding std::string values to CListBox ends up as gibberish
好的,这有什么问题吗?
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
以汉字结尾。为什么?
这个有效:
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
,然后将 that 与 AddString
一起传递。
您正在向需要 wchar_t
个字符串的函数发送 char
个字符串。 (LPCTSTR)
转换掩盖了本应告诉您出了什么问题的错误消息。
好的,这有什么问题吗?
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
以汉字结尾。为什么?
这个有效:
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
,然后将 that 与 AddString
一起传递。
您正在向需要 wchar_t
个字符串的函数发送 char
个字符串。 (LPCTSTR)
转换掩盖了本应告诉您出了什么问题的错误消息。