c++ - VarBstrFromI4 改变了程序中其他一些 BSTR 的值

标签 c++ winapi mfc ole bstr

BSTR length;
BSTR checkLength = SysAllocString(TEXT("document.getElementsByTagName('tspan').length.toString()"));

HRESULT h = gWebView->stringByEvaluatingJavaScriptFromString(checkLength, &length);
SysFreeString(checkLength);

long longLength;
h = VarI4FromStr(length,0,0,&longLength);
SysFreeString(length);

BSTR index;
long longIndex = longLength - 1;
h = VarBstrFromI4(longIndex,0,0,&index);

最后一行 VarBstrFromI4 将 index(BSTR) 的值更改为我想要的值,但还将 length(BSTR) 的值更改为 index(BSTR) 的值。我一直在尝试做很多选择,包括带有索引和长度的 SysAllocString,但同样的问题仍然存在。

请帮忙。

最佳答案

一旦你在一个字符串上调用了SysFreeString,你就不应该再关心那个字符串了。释放的字符串在内部保存一个释放内存的地址,该内存稍后可能由另一个字符串或变量分配。在这种情况下,新字符串恰好与旧字符串位于相同的内存地址。

关于c++ - VarBstrFromI4 改变了程序中其他一些 BSTR 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6277145/

相关文章:

for vs if vs while 中的 C++17 结构化绑定(bind)声明?

c++ - 结构中的位字段有什么用?

delphi - 如何为 VBScript 错误获取更具声明性的字符串

c - 读取文件访问/修改时间戳

c++ - ImpersonateLoggedOnUser 失败的条件

javascript - 如何在HTML JavaScript 中调用mfc C++ 函数以及如何在mfc C++ 中调用JavaScript 函数?

c++ - 函数参数中的结构 C++ 数组根本不起作用

c++ - 使用 C++ 接口(interface)在 Prolog 中进行列表处理

c++ - 如何在 OnInitDialog 函数中最小化 MFC 应用程序?

c++ - 允许用户在 CStatic C++ MFC App 中绘制拖动矩形