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

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

 2006-07-21 11:42:52 来源:WEB开发网   
核心提示: catinfo.catid = CATID_AcmePlugin;catinfo.lcid = 0x0409; // locale=englishUSES_CONVERSION; // uses A2Wwcscpy(catinfo.szDescription,A2W("My

catinfo.catid = CATID_AcmePlugin;

catinfo.lcid = 0x0409;  // locale=english

USES_CONVERSION;     // uses A2W

wcscpy(catinfo.szDescription,

A2W("My Acme Plugin."));

pcr->RegisterCategories(1, &catinfo);

接下来的任务是如何告诉COM你的COM类是Acme Plugin。ICatRegister也有相应的方法来做这件事情,它就是RegisterClassImplCategories。

// 也是在DllRegisterServer中

CATID catid = CATID_AcmePlugin;

pcr->RegisterClassImplCategories(

CLSID_MyPluginObj, 1, &catid);

这样就注册了你的COM类,实现种类CATID_AcmePlugin。是不是很简单啊!这些都是此类编程的套路。ICatRegister将有关哪个类实现哪个种类的信息放入注册表,以便Windows能快速读到它,而不用像你最开始所做的那样去实例化每一个组件来查找IMyAcmePlugin接口。

与种类的注册类似,ICatRegister也有用注销种类的方法,这两个方法对于种类而言都是必须的(相对于实现而言),也就是说,你的COM类需要其容器来实现那些种类。当你的组件需要专门的回调接口时,就必须实现种类。下面是完整的ICatRrgister接口:  

//
ICatRegister
////////////////////////////////////////////////////////////////
// ICatRegister interface, edited from comcat.h
//
class ICatRegister : public IUnknown {
public:
   virtual HRESULT RegisterCategories(
    ULONG cCategories,        // number of categories to register
    CATEGORYINFO rgCategoryInfo[]); // info for each one
    
   virtual HRESULT UnRegisterCategories(
    ULONG cCategories,       // number of categories to unregister
    CATID rgcatid[]);        // their CATIDs
   virtual HRESULT RegisterClassImplCategories(
    REFCLSID rclsid,        // COM class ID
    ULONG cCategories,       // number of categories it implements
    CATID rgcatid[]);        // their CATIDs
   virtual HRESULT UnRegisterClassImplCategories(
    REFCLSID rclsid,        // COM class ID
    ULONG cCategories,       // num implemented categories to unreg
    CATID rgcatid[]);       // their CATIDs
   virtual HRESULT RegisterClassReqCategories(
    REFCLSID rclsid,        // COM class ID
    ULONG cCategories,       // number of categories it requires
    CATID rgcatid[]);       // required CATIDs
   virtual HRESULT UnRegisterClassReqCategories(
    REFCLSID rclsid,        // COM class ID
    ULONG cCategories,       // number of req''''d categories to unreg
    CATID rgcatid[]);       // CATIDs to unregister
};
//

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

Tags:理解 COM 编程

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