我正在获得SAFEARRAY **,其应包含" GOOG"和" O"
在调试器中看起来不错
但是我无法取出BSTR!
此代码
BSTR * raw;
HRESULT hr = SafeArrayAccessData(*Strings, (void **)&raw);
给了我
如果我继续取消引用原始指针
,它会崩溃我手动完成相同的结果
BSTR* t2 = (BSTR*)(*Strings)->pvData;
答案 0 :(得分:2)
经过多次实验,答案似乎是你必须将字符串提取为VARIANTS,然后将它们转换为BSTR,最后转换为wstrings。
像这样的东西
// access data as an array of variants
VARIANT * raw;
SafeArrayAccessData(*Strings, (void **)&raw);
// convert to a BSTR wrapper
const _bstr_t wrapper(raw[0]);
// convert to a wstring
std::wstring wstrVal((const wchar_t*)wrapper);
或者,正如Hans Passant所建议的那样一举
// access data
VARIANT * raw;
SafeArrayAccessData(*Strings, (void **)&raw);
std::wstring wstrVal((const wchar_t*)raw[0].bstrVal);