gpt4 book ai didi

c++ - 不知道如何正确使用 IShellWindows::Item

转载 作者:行者123 更新时间:2023-11-28 07:28:45 26 4
gpt4 key购买 nike

我在XP系统上使用VC6。

以下是我的代码。它在我的电脑上运行完美,但在其他电脑上似乎 pisw->Item(v, &pidisp) 不等于 S_OK。现在我想弄清楚这里出了什么问题

  IShellWindows *pisw;
if (SUCCEEDED(CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_ALL,
IID_IShellWindows, (void**)&pisw))) {
VARIANT v;
V_VT(&v) = VT_I4;
IDispatch *pidisp;
found = FALSE;

for (V_I4(&v) = 0; !found && pisw->Item(v, &pidisp) == S_OK; V_I4(&v)++) {
IWebBrowserApp *piwba;
if (SUCCEEDED(pidisp->QueryInterface(IID_IWebBrowserApp, (void**)&piwba))) {
// blablabla....do something..
}

所以我改了一些代码

...
IDispatch *pidisp;
hr = pisw->Item(v, &pidisp);
if (SUCCEEDED(hr))
{
for (V_I4(&v) = 0; !found ; V_I4(&v)++) {
IWebBrowserApp *piwba;
if (SUCCEEDED(pidisp->QueryInterface(IID_IWebBrowserApp, (void**)&piwba))) {
// blablabla....do something..
}

然后 hr 的返回值变为 1。并且在运行到“pidisp->..”步骤时出现访问冲突错误。谁能帮帮我?

最佳答案

原始代码错误地测试了 pisw->Item(v, &pidisp) 的结果。很奇怪,因为它稍后确实使用了正确的检查。

问题是除了S_OK之外还有很多成功的返回值。您的修复是正确的,您应该使用 SUCCEEDED(hr),但是您错误地将循环移到了 SUCCEEDED(hr) 测试中。您应该为 V_I4(&v) 的每个值检查 SUCCEEDED(hr)

您的 S_FALSE 结果是因为您现在在循环之前调用了 hr = pisw->Item(v, &pidisp);,这意味着 v 未初始化(垃圾)。假设它的垃圾值为 728365。S_FALSE 表示:调用成功,但窗口少于 728365。

关于c++ - 不知道如何正确使用 IShellWindows::Item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18183359/

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