我有从 COM 服务器传递的 BSTR 字符串。当我将此字符串放入 _bstr_t(或 CComBSTR)构造函数时,就会发生访问冲突。我检查了这个异常,发现只有当 BSTR 为空(或 null)时才会引发这个异常。
我试图将空的 BSTR 显式放入 _bstr_t 构造函数,这很好用:
BSTR bstr = NULL;
_bstr_t t(bstr, false);
cout << t.length() << endl;
但是对于从 COM 服务器传递的 BSTR,这不起作用 - 当字符串为空或 null(或可能已损坏?)时会发生访问冲突异常
我发现这种解决方法效果很好:
if (SysStringLen(bstrFromCOMserver) > 0) {
_bstr_t t(bstrFromCOMserver, false);
cout << t.length() << endl;
}
但我想知道为什么这不能直接与 _bstr_t 或 CComBSTR 包装器一起使用:
_bstr_t t(bstrFromCOMserver, false);
if (t.length() > 0) {...}
更新:
COM 服务器如何传递 BSTR 字符串:
void CALLBACK CProxy_ISTIQuoteEvents::OnSTIQuoteSnap(const structSTIQuoteSnap& structQuoteSnap) const {
if (SysStringLen(structQuoteSnap.bstrUpdateTime) > 0) {
_bstr_t updateTime(structQuoteSnap.bstrUpdateTime, false);
}
}
}