我得到了一个SAFEARRAY **,它应该包含"GOOG“和"O”
它在调试器中看起来很好

然而,我不能把BSTR拿出来!
这段代码
BSTR * raw;
HRESULT hr = SafeArrayAccessData(*Strings, (void **)&raw);给了我

如果我继续取消引用原始指针,它将崩溃。
我手工操作得到了完全相同的结果。
BSTR* t2 = (BSTR*)(*Strings)->pvData;

发布于 2014-04-04 02:49:36
经过多次实验,答案似乎是您必须提取字符串作为变体,然后将其转换为BSTR,最后转换为wstring。
像这样的东西
// 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);或者,像汉斯·帕桑特建议的那样,一举
// access data
VARIANT * raw;
SafeArrayAccessData(*Strings, (void **)&raw);
std::wstring wstrVal((const wchar_t*)raw[0].bstrVal);https://stackoverflow.com/questions/22845453
复制相似问题