【发布时间】:2015-02-17 21:59:11
【问题描述】:
背景:
我正在创建一个 IWebBrowser2 并导航到一个 URL。这是代码的简短版本:
IWebBrowser2* pWebBrowser = NULL;
hr = ::CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void **)&pWebBrowser);
hr = pWebBrowser->Navigate(bstrURL, &varFlags, &varEmptyStr, &varEmptyStr, &varEmptyStr);
hr = pWebBrowser->put_Visible(VARIANT_TRUE);
// Get the handle of the IE window
HWND handle = NULL;
hr = pWebBrowser->get_HWND((long*)&handle); // this could be done better with reinterpret_cast
…
问题:
有时,对 get_HWND 的调用会失败,并显示 0x80004005 错误代码。它仅在某些工作站上失败。
问题:
- 为什么调用 get_HWND 随机失败?
- get_HWND 的使用是否正确?预期的类型是 SHANDLE_PTR。
一些可能有用的链接:
http://msdn.microsoft.com/en-us/library/aa752126%28v=vs.85%29.aspx http://codecentrix.blogspot.com/2007/11/when-iwebbrowser2gethwnd-returns-efail.html
需要更多信息?让我知道
谢谢!
【问题讨论】:
-
0x80004005 是“拒绝访问”。您使用 get_HWND 没有问题。您的程序与故障工作站的安全注意事项有关。
-
@manuell 据我所知,0x80004005 是“未指定的错误”。来源:msdn.microsoft.com/en-us/library/cc704587.aspx
-
你是对的。对不起。如果你提前调用 get_HWND 会发生什么?
标签: windows internet-explorer visual-c++ com window-handles