com组件、对象、接口 您所在的位置:网站首页 com口的定义 com组件、对象、接口

com组件、对象、接口

2023-12-01 19:37| 来源: 网络整理| 查看: 265

1、com(component object model)组件对象模型。 特点:语言无关、可以重用 应用:DirectX、OLE DB、ADO OLE是com的应用。 2、这里写图片描述 一个com组件包括多个com对象,一个com对象实现多个接口。 3、com对象类似于c++中的类,包含属性和方法。在c++中,可以用类来定义com对象。 com组件对客户来说是透明的。 GUID用于标识com组件。 com接口:二进制特性,每个接口必须从IUnknown继承而来。 4、 IUnknown的定义: interface IUnknown { HRESULT QueryInterface( [in] REFIID iid, [out] void **ppv); ULONG AddRef(); ULONG Release(); } 输入参数iid为接口标识符:IID。 输出参数ppv为查询得到的结果接口指针。 IUnknown包含三个函数,分别是 QueryInterface、AddRef、Release。这三个函数是无比重要的,而且它们的排列顺序也是不可改变的。 QueryInetrface:查询com对象的其他接口指针 AddRef和Release用于对引用计数进行操作。 引用计数:每个com对象都记录 一个“引用计数“的数值,该数值记录了有多少个指针在使用com对象。用户得到指向该对象的接口的指针后,引用计数加一,用完后引用计数减一。减到0时,com对象就在内存中清除。 AddRef、Release分别用于引用计数加一减一操作。 HRESULT QueryInterface( [in] REFIID iid, [out] void **ppv); 返回32位的整数,有三种情况: (1)S_OK,查询到了指定接口,接口指针存放在ppv输出的参数中。 (2)E_NOINTERFACE,对象不支持指定接口,*ppv为NULL。 (3)E_UNEXPECTED,发生错误。 HRESULT类型是一个32位的整数。反映函数调用结果。 5、com对象和接口表示方法: 这里写图片描述 6、DLL动态库或exe程序可以看做是com在windows上的具体实现。 dll:包括函数引出表,有函数的名称、编号、地址。 dll导出函数的方式: (1) 源代码中的 __declspec(dllexport) (2).def 文件中的 EXPORTS 语句 dll的引出函数格式: extern “c” long _stdcall MyFunction(); extern “c” int _stdcall MyFunction(); dll中的def文件用于描述dll程序的模块信息。 如 mylib.def: ; mylib.def : 声明 DLL 的模块参数。

LIBRARY

EXPORTS ; 此处可以是显式导出 DllCanUnloadNow PRIVATE DllGetClassObject PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE com组件必须在系统注册表中注册后,才能被客户端调用。 客户端不直接调用引出函数,通过com库的API调用。 调用dll可按照如下步骤: com客户端程序使用LoadLibrary函数装入dll,然后客户端调用GetProcAddress函数获得dll中引出函数的地址。当函数使用完后,如果不在使用dll程序,则调用FreeLibrary把dll程序卸出内存。 7、类厂: com库通过类厂创建com对象。一个对象对应一个类厂。类厂是一个对象,有IClassFactory接口。 com库包含了com组件。使用com库时,先初始化。 com库常用函数: 初始化: CoBuildVersion //获取com库版本 Coinitialize //com库初始化 CoUninitialize //com库功能服务终止

class IClassFactory:public IUnknwn { virtual HRESULT _stdcall CreateInstance(IUnknown *pUnknownOuter,const IID&iid,void **ppv)=0;//创建com对象 virtual HRESULT _stdcall LockServer(BOOL block)=0; }; 类厂由引出函数DllGetClassObject创建。 HRESULT DllGetClassObject(const CLSID& clsid,const IID& iid,(void*)ppv); 8、com开发:com sdk、MFC、ATL



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有