com.txt
上传用户:weisheen
上传日期:2022-07-09
资源大小:19390k
文件大小:5k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

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