我使用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/

10-10 07:25