gpt4 book ai didi

c++ - 在 SAFEARRAY 中访问 BSTR

转载 作者:行者123 更新时间:2023-11-30 02:47:18 26 4
gpt4 key购买 nike

我得到一个 SAFEARRAY ** 应该包含“GOOG”和“O”

在调试器中看起来不错

enter image description here

但是我无法取出 BSTR!

这段代码

      BSTR * raw;
HRESULT hr = SafeArrayAccessData(*Strings, (void **)&raw);

给我

enter image description here

如果我继续取消引用原始指针,它会崩溃

我手动得到完全相同的结果

BSTR* t2 = (BSTR*)(*Strings)->pvData;

enter image description here

最佳答案

经过多次实验,答案似乎是您必须将字符串提取为 VARIANTS,然后将它们转换为 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);

或者,按照 Hans Passant 的建议,一口气

// access data 
VARIANT * raw;
SafeArrayAccessData(*Strings, (void **)&raw);
std::wstring wstrVal((const wchar_t*)raw[0].bstrVal);

关于c++ - 在 SAFEARRAY 中访问 BSTR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com