使用纯粹的C++语言编写COM组件

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  本文提供一个完全用C++实现的进程内(DLL)COM服务器,不要ATL或MFC提供任何支持。用这种方式编写COM对象可以让你深入地洞察到COM处理进程内服务器的方法以及COM是如何创建类工厂的。利用本文提供的这个简单框架你可以实现很基本的COM组件,如外壳扩展(Shell Extensions)等。

  以下是用本文所说的方式编写自己的COM对象要经过的步骤:

  第一步:写一个头文件,这个头文件包含以下内容:

  1、 包含文件comdef.h:#include <comdef.h>。

  2、 定义COM服务器的GUID。

  _declspec(selectany) GUID CLSID_Mine = { 0xdc186800,

  0x657f,

  0x11d4,

  {0xb0, 0xb5, 0x0, 0x50, 0xba, 0xbf, 0xc9, 0x4}

  };

  3、 给出接口的IID以及这个接口要实现的方法定义。到时客户端会用到这个接口的IID和接口的方法。

  interface __declspec(uuid("F614FB00-6702-11d4-B0B7-0050BABFC904")) ImyInterface : public IUnknown

  {

  STDMETHOD(Square)(long *pVal)PURE;

  STDMETHOD(Cube)(long *pVal)PURE;

  };

  客户端使用此接口:

  HRESULT hr;

  ImyInterface *pmine=(0);

  hr = CoCreateInstance(CLSID_Mine, // COM 服务器的CLSID

  NULL, //不支持聚合

  CLSCTX_INPROC_SERVER, // 是个DLL

  __uuidof(ImyInterface), // 接口的IID

  (void**)&pmine

  );

  还有一种方法可以从注册表中获得COM对象的CLSID,就是调用CLSIDFromProgId()函数,不过必须把组件的ProgId传递给这个函数。

  第二步:必须为所定义的接口提供实现,本文用的方法是创建一个从接口继承的新类:

  // 这个类实现单接口ImyInterface ...

  //

  //

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答