c++ 编写COM
来源:互联网 发布:南风知我意琰阙txt 编辑:程序博客网 时间:2024/05/17 15:37
以下是用本文所说的方式编写自己的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 ...
//
//
class CmyInterface : public CComBase<> ,
public InterfaceImpl<ImyInterface>
{
public:
CmyInterface();
virtual ~CmyInterface();
// 我们必须要为QueryInterface 编写代码
STDMETHOD(QueryInterface)(REFIID riid,LPVOID *ppv);
// ImyInterface 接口方法
STDMETHOD(Square)(long *pVal);
STDMETHOD(Cube)(long *pVal);
};
模版类InterfaceImpl<>提供接口引用计数的实现。在此我们可以用多接口继承,那样就能在一个COM组件中实现多个接口。
- 编写C++C#相互调用COM组件
- 用C#.NET 编写ActiveX(COM)控件
- 用标准C编写COM(六) .
- 用C编写COM(一)
- 用C编写COM(二)
- 用C编写COM(三)
- 用标准C编写COM(四)
- 用C shape编写COM组件
- C#.NET com组件的编写
- 用标准C编写COM(二)
- 用标准C编写COM(一)COM in plain C,Part1
- 用标准C编写COM(二)COM in plain C,Part2
- 用标准C编写COM(三)COM in plain C,Part3
- 用标准C编写COM(四)COM in plain C,Part4
- 用标准C编写COM(五)COM in plain C,Part5
- 用标准C编写COM(六)COM in plain C,Part6
- 用标准C编写COM(七)COM in plain C,Part7
- 用标准C编写COM(八)COM in plain C,Part8
- hibernate 原生sql返回结果执行AddEntity方法
- 百度网盘真实下载地址获取器
- 数据结构 栈实现(练手题)传说中的数据结构
- Google protobuf的安装及使用
- hdu 1358 Period(KMP循环)
- c++ 编写COM
- 零开始学算法
- activePDF Toolkit教程(附源码)
- 面向对象的基本设计原则
- 利用.NET Framework创建基于Windows的应用程序
- javascript mvc实例
- char,TCHAR,WCHAR区别
- Flex停止事件传播说明示例
- U-Boot 开发环境篇 Kermit 、 tftp服务