【问题标题】:VarBstrFromI4 changes the value of some other BSTR in the programVarBstrFromI4 改变程序中其他一些 BSTR 的值
【发布时间】:2026-01-23 00:25:01
【问题描述】:
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,但同样的问题仍然存在。

请帮忙。

【问题讨论】:

    标签: c++ winapi mfc ole bstr


    【解决方案1】:

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

    【讨论】: