WEB开发网
开发学院软件开发VC 理解COM编程中的“种类”(Category)概念 阅读

理解COM编程中的“种类”(Category)概念

 2006-07-21 11:42:52 来源:WEB开发网   
核心提示: CatView是个典型的将窗口切分成两个窗格的程序,左边窗格是种类清单,理解COM编程中的“种类”(Category)概念(5),当单击其中一条记录,右边窗格会显示相应的实现这个种类的类信息,调用ICatInformation::EnumCategories ,这个函数回传一个IEnumC

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
}

上一页  1 2 3 4 5 6  下一页

Tags:理解 COM 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接