理解COM编程中的“种类”(Category)概念
2006-07-21 11:42:52 来源:WEB开发网CatView是个典型的将窗口切分成两个窗格的程序,左边窗格是种类清单,当单击其中一条记录,右边窗格会显示相应的实现这个种类的类信息。(CatView程序中使用了一个类CwinMgr,这个类将在另外一篇文章中做专门讨论:“创建一个随心所欲定制窗口尺寸的类”)。图一所示,选中“Active Scripting Engine with Parsing”列表项,则右边的窗格将显示实现它的各个组件:XML,Java,Visual Basic和PerlScript脚本引擎。CatView中的两个主要的函数是CLeftView::PopulateCategoryList 和 CRightView::ShowCategory。为了简单起见,我实现了一些有用的辅助类(在头文件CoolCat.h中)。第一各类是CCatInformation,它用ATL智能指针封装了ICatInformation接口。
//
class CCatInformation : public CComPtr {
public:
CCatInformation() {
CoCreateInstance(CLSID_StdComponentCategoriesMgr,
NULL, CLSCTX_INPROC);
}
};
有了CCatInformation类,就不用再调用CoCreateInstance——实例化,然后直接使用类对象。
CCatInformation spCatInfo;
spCatInfo->SomeMethod(...);
为了枚举系统中的组件种类,调用ICatInformation::EnumCategories 。这个函数回传一个IEnumCATEGORYINFO 接口指针,然后用这个指针枚举种类。
// IEnumCATEGORYINFO
CCatInformation spCatInfo;
CComPtr spEnumCatInfo;
HRESULT hr = spCatInfo->EnumCategories(
GetUserDefaultLCID(),&spEnumCatInfo);
ASSERT(SUCCEEDED(hr));
// 使用指针枚举种类
ULONG nRet=0;
CATEGORYINFO catinfo;
while (SUCCEEDED(spEnumCatInfo->Next(1,
&catinfo, &nRet)) && nRet==1) {
// add catinfo to list
}
更多精彩
赞助商链接