我使用Visual C ++ 2008和ADO访问数据库并获取如下字段值:
_variant_t vtValue;
AfxVariantInit(&vtValue);
vtValue = m_pRecordset->Fields->GetItem(_variant_t(strFieldName))->GetValue();
If (vtValue.vt == VT_BSTR)
{
strValue = vtValue.bstrVal;
TRACE(_T(“Field value is %s.\r\n”), strValue); // Cause CrtDbgReport: String too long or IO Error
}
else
{
.. other codes…
}
strValue的TRACE语句将导致以下错误:
“CrtDbgReport: String too long or IO Error”
我只是检查了strValue,发现它是一个只有6个字符的中文字符串,没什么特别的。为什么会导致错误?
谢谢
最佳答案
BSTR是由长度前缀,数据字符串和终止符组成的复合数据类型,您不能直接将其分配给CString,因为CString没有长度前缀。
您可以使用智能点类_bstr_t进行转换。
strValue = (TCHAR*)(_bstr_t)vtValue;
关于c++ - 将BSTR转换为CString时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22152388/