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/