com.txt
上传用户:weisheen
上传日期:2022-07-09
资源大小:19390k
文件大小:5k
- 1. 1.1 OOP: 类, 对象, 继承,重载,重写,引用;
- OOC:组件,组件实例(设计状态/运用状态), 引用;
- 1.2 OOP{cpp/java/c#/vb.net/...}
- OOC{COM/EJB/CORBA}(Component Object Model) COM+(提供组件运行平台和企业级服务)
- /DCOM(分布式的COM)
- 1.3 组件的特征(OOC):
- 1. 二进制封装;
- 2. BITS原则: (Bit Service)原则;
- 2.1 软件实体通过接口对外提供服务;
- 2.2 软件接口通过接口依赖其它的软件实体;
- 3. 组件需要部署和安装;独立编译/安装/部署,独立的软件实体;
- 1.4 组件接口定义:
- 1.4.1 刻画组件的功能;完整刻画;
- 1.4.2 接口的定义语言:c/cpp;java/c#/vb.net;不满足通用性
- 1.4.3 如果采用 MIDL, 只能定义接口;
- 1.5 IDL语言基础:
- import, 调用其它接口定义文件;
- interface, 定义接口;
- coclass, 定义接口实现者,COM类,或COM构件;
- library, 组件库;对应一个具体组件;
- MFC: CObject;
- COM: IUnknown;//提供组件功能查询;查的是接口;和 new
- 组件(library)/构件(coclass)/接口(interface);组件实体;
- 1.6 COM组件实体的定义方法;
- 1.1 GUID, 512位随机数据;GUIDGen.exe;
- [头:uuid,指定名字;
- helpstring,说明性信息;pointer_default定义借口指针的一种模式;
- version,版本;
- default, ]
- 名字
- {
- }
- 1.7 通过IDL,编写add, sub;使用midl.exe编译成C;
- 1.8 COM数据类型列表;
- HRESULT,32整数;代表执行的结果;0表示正确,非零表示错误;
- BSTR, 宽字符串;使用Unicode码;(一个字符,两个字节)
- 前两个字节,对应字符串中字符个数,后面依次为UNICDODE码;
- "hello", [h][e][l][l][o][ ]
- [0][5][0][h][0][e][0][l][0][l][0][o]
- VARIANT 智能型数据类型;(万能型)
- vt属性,表示当前变量所用作的类型;
- 值,根据类型不同在不同属性中;
- 1.9 ATL库中的方法宏:
- 1.9.1 方法声明宏:STDMETHOD;
- 1.9.2 方法实现宏:STDMETHODIMP;
- 1.10 com 安装和卸载 regsvr32.exe *.dll; regsvr32.exe -u *.dll
- 2. COM接口定义技术;
- 2.1 Custom,自定义接口; 必须使用IDL文件;
- 2.1.1 IUnknown接口;
- 2.1.1.1 管理组件的生命周期;
- 2.1.1.2 管理组件的功能列表;
- 2.1.2 IUnknonw的实现(CComObjectRootEx);
- 2.1.2.1 和生命周期相关(add/release)
- DECLARE_PROTECT_FINAL_CONSTRUCT;
- CComObjectRootEx<线程类型>
- 2.1.2.2 接口映射表;
- 将接口类型添加到接口映射表中,否则QueryInterface找不到;
- 2.1.2.3 COM资源使用原则“谁使用谁释放”;
- 2.2 自动化接口; 不需要IDL文件;
- 2.3 接口中的各种数据类型;
- 3. COM组件的实现技术;
- 3.1 接口映射;
- 3.2 多接口实现;
- 4. COM组件的回调和事件;
- 5. COM组件的合成与集合;
- 6. COM组件的客户端调用技术;
- ---02.22----------------------day09---------------------------------
- COM组件:
- 1.项目FirstDemo(组件类),创建组件:
- 右键-->New ATL Object-->Simple Object-->右键-->new method------>
- ---hello
- ---([in] BSTR name,[out] BSTR* result); //in表输入,out表输出
- //import:调用其他接口的文件
- //library:组件库
- //coclass:定义接口实现者
- //interface:定义接口
- //uuid:指定名字(微软为了防止名字重复,设定为512位的随机数)
- //helpstring说明性信息
- //pointer_default定义接口指针的模式
- //version版本
- -->再创建一个接口时要手工加入(如上操作的话,都会设定当前接口为默认接口,有些麻烦)
- -->新的接口的uuid可在目录VSCommonTools中的GUIDGEN.EXE中复制一个过来
- -->在实现文件的头文件中的类要继承该接口,在BEGIN_COM_MAP(CMyAbc)中添加接口映射,声明接口类函数(在函数前要加上STDMETHOD),然后在实现文件中重写继承自接口类的函数(在函数前要加上STDMETHODIMP)
- -----------------其中FirstDemo.idl及Debug中的FirstDemo.dll==>COM的安装:regsvr32.exe *.dll(写入注册表)-->卸载:regsvr32.exe -u *.dll(删除注册表信息)
- 2.项目intertest01(组件类)中的myaddinter.idl-->
- (在命令提示窗口中)在文件目录下输入-- cl.exe -->midl.exe myaddinter.idl
- 生成5个文件:myaddinter.h、myaddinter_i.c有用,是必须的
- 3.项目clientDemo(窗体类),导入两个由FirstDemo.idl编译后生成的文件:FirstDemo.h、FirstDemo_i.c--->在clientDemo中必须引入以上两个文件做头文件,即可直接使用(不用重写,直接引用组件提供的功能,但是要声明引用)
- clientDemo03用IUnknonw的QueryInterface来定位要找的接口实现的入口名字。
- ::CoInitialize(NULL);//COM的初始化函数
- ::CoUninitialize();//释放内存
- 4.项目IUnknownDemo包含组件和测试类,组件编译后,测试类通过头文件引用IUnknownDemo.h和IUnknownDemo_i.c;
- ::SysAllocString
- str.AllocSysString()