2014-03-03 50 views
0

我使用Visual C++ 2008和ADO訪問數據庫並獲得字段值是這樣的:錯誤BSTR轉換成CString的

_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

請問你能顯示'strValue'的定義嗎? – Mgetz

+0

是的,它是CString strValue; – alancc

+0

[本答案](http://stackoverflow.com/a/1685831/332733)可能會有用 – Mgetz

回答

0

BSTR是由一個長度前綴,數據串,和終止子的複合數據類型的,則不能將其分配給直接CString的作爲CString的不具有長度前綴。

您可以使用智能點類_bstr_t進行轉換。

strValue = (TCHAR*)(_bstr_t)vtValue;