将BSTR转换为CString时出错

时间:2014-03-03 16:47:31

标签: c++ cstring bstr

我使用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个字符的中文字符串,没什么特别的。为什么会导致错误?

由于

1 个答案:

答案 0 :(得分:1)

BSTR是一种复合数据类型,由长度前缀,数据字符串和终结符组成,您不能直接将其分配给CString,因为CString没有长度前缀。< / p>

您可以使用智能点类_bstr_t进行转换。

strValue = (TCHAR*)(_bstr_t)vtValue;