- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个命名空间扩展,可以进行网络调用以显示其内容。
当资源管理器想要显示文件夹的内容时,它会在我的实现中调用 EnumObjects
。当进行 webcall 时出错,我想将用户返回到我的 NSE 的根目录。目前我调用以下代码:
LPITEMIDLIST pidl = /*The piddle to navigate to, in my case root*/;
IShellBrowser* browser = (IShellBrowser*)SendMessage(m_hWnd, (WM_USER + 7), 0, 0);
if (browser != NULL) {
hr = browser->BrowseObject(pidl, SBSP_SAMEBROWSER | SBSP_ABSOLUTE);
}
有时,对 BrowseObject
的方法调用会因无效访问异常 (x0000005) 而失败。
我们还使用了一个变体,该变体将使用以下变体:
hr = GetSite(IID_IServiceProvider, (void**)&serviceProvider);
if (FAILED(hr))
return false;
IShellBrowser *browser;
hr = serviceProvider->QueryService(SID_SShellBrowser, &browser);
if(FAILED(hr))
return false;
站点是通过接口(interface)IObjectWithSite
获取的。这也随机失败。我注意到,当网络调用失败时,m_site
为 NULL
。
EnumObject
在资源管理器的单独线程中调用,当我进行网络调用时,UI 不会卡住。我假设我可能不会从枚举文件夹的线程调用 Browse 对象,但如何在正确的线程上调用浏览?
在新线程中调用 BrowseObject
并等待 1 秒不会导致崩溃。但我不会将此 hack 视为有效的解决方案。
最佳答案
您似乎没有正确地添加对您正在使用的 COM 接口(interface)的引用,这可能导致它实际上被销毁。所以要么使用 CComPtr ,或者至少调用 AddRef
/Release
来保存对该对象的有效引用。
此外,如果使用多个线程,您是否从所有线程调用 CoInitialize
?
关于c++ - 在 IShellFolder::EnumObjects() 中使用 IShellBrowser::BrowseObject(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50965804/
我正在尝试实现 IShellBrowser。一种方法是: HRESULT STDMETHODCALLTYPE IShellBrowser::QueryActiveShellView(/* [out]
我有一个命名空间扩展,可以进行网络调用以显示其内容。 当资源管理器想要显示文件夹的内容时,它会在我的实现中调用 EnumObjects。当进行 webcall 时出错,我想将用户返回到我的 NSE 的
一些人指出存在一条未记录的消息,该消息从文件打开和保存对话框的公共(public)对话框 HWND 中检索 IShellBrowser 接口(interface)指针。 但是关于该指针是否被 AddR
我是一名优秀的程序员,十分优秀!