Windows IResultData::DeleteItem和IResultData::DeleteAllrLTItems返回E\u意外 我们有一个基于ATL的Visual C++ MMC SnAPIN问题。我们有一个仅显示在范围窗格中的范围项。选择此项后,将使用一组结果项填充结果窗格
当用户选择“删除所有项目”弹出菜单命令时,将调用我们的管理单元代码——首先它执行一些工作,然后继续清除结果视图。我们需要以下行为:用户单击该菜单项,调用自定义代码以执行有用的工作,然后所有项从结果窗格中消失,范围项保持选中状态 我尝试了两种方法来删除所有结果项 变体1-它调用Windows IResultData::DeleteItem和IResultData::DeleteAllrLTItems返回E\u意外 我们有一个基于ATL的Visual C++ MMC SnAPIN问题。我们有一个仅显示在范围窗格中的范围项。选择此项后,将使用一组结果项填充结果窗格,windows,visual-c++,mmc,Windows,Visual C++,Mmc,当用户选择“删除所有项目”弹出菜单命令时,将调用我们的管理单元代码——首先它执行一些工作,然后继续清除结果视图。我们需要以下行为:用户单击该菜单项,调用自定义代码以执行有用的工作,然后所有项从结果窗格中消失,范围项保持选中状态 我尝试了两种方法来删除所有结果项 变体1-它调用IResultData::DeleteAllRsltItems(),返回E\u UNEXPECTED,并且项目没有被删除-它们只是停留在那里 变体2-它为先前插入结果窗格的每个项目调用IResultData::DeleteI
IResultData::DeleteAllRsltItems()
,返回E\u UNEXPECTED
,并且项目没有被删除-它们只是停留在那里
变体2-它为先前插入结果窗格的每个项目调用IResultData::DeleteItem()
。同样,每次调用都会返回E_UNEXPECTED
,并且项目不会被删除
如何从MMC视图中正确删除所有结果项?我们在OnShow处理程序中执行此操作。所有子项都将按如下方式删除:
CComPtr<IResultData> pResultData;
result = pConsole->QueryInterface(IID_IResultData, (void **)&pResultData);
assert( SUCCEEDED(result) );
pResultData->DeleteAllRsltItems();
CComPtr pResultData;
结果=pConsole->QueryInterface(IID_IResultData,(void**)和pResultData);
断言(成功(结果));
PRELTDATA->DeleteAllrLTItems();
然后重新添加:
RESULTDATAITEM rdi;
ZeroMemory(&rdi, sizeof(RESULTDATAITEM) );
rdi.mask = RDI_STR | RDI_IMAGE | RDI_PARAM;
rdi.nImage = m_resultChildren[i]->GetBitmapIndex();
rdi.str = reinterpret_cast< wchar_t* >(MMC_CALLBACK);
rdi.nCol = 0;
rdi.lParam = (LPARAM)m_resultChildren[i].get();
HRESULT result = pResultData->InsertItem( &rdi );
RESULTDATAITEM rdi;
零内存(&rdi,sizeof(RESULTDATAITEM));
rdi.mask=rdi|u STR | rdi|u IMAGE | rdi|u PARAM;
rdi.nImage=m_resultChildren[i]>GetBitmapIndex();
rdi.str=reinterpret\u cast(MMC\u回调);
rdi.nCol=0;
rdi.lParam=(lParam)m_resultChildren[i].get();
HRESULT结果=预设数据->插入项(&rdi);
这样可以删除结果项。我假设代码中还有另一个问题导致了意外的E_