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

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.   
  35.        1.9 ATL库中的方法宏:
  36.                    1.9.1 方法声明宏:STDMETHOD;
  37.                    1.9.2 方法实现宏:STDMETHODIMP;
  38.        1.10 com 安装和卸载  regsvr32.exe *.dll; regsvr32.exe -u *.dll
  39. 2. COM接口定义技术;
  40.        2.1  Custom,自定义接口; 必须使用IDL文件;
  41.            2.1.1 IUnknown接口;
  42.               2.1.1.1 管理组件的生命周期;
  43.               2.1.1.2 管理组件的功能列表;
  44.            2.1.2 IUnknonw的实现(CComObjectRootEx);
  45.               2.1.2.1 和生命周期相关(add/release) 
  46.                       DECLARE_PROTECT_FINAL_CONSTRUCT;
  47.                       CComObjectRootEx<线程类型>
  48.               2.1.2.2 接口映射表;
  49.      将接口类型添加到接口映射表中,否则QueryInterface找不到;
  50.               2.1.2.3 COM资源使用原则“谁使用谁释放”;
  51. 3. 练习,使用WebBrowser组件熟悉COM的基本概念和特征。
  52.             3.1 IHTML****;
  53.             3.2 IWebBrowser;
  54.             3.3 IHTMLDocument; IHTMLDocument2,IHTMLDocument3,IHTMLDocument4
  55.             3.4 IHTMLElement;
  56.             3.5 IHTMLImgElement
  57. 4. COM结构;
  58.             4.1 COM层次结构: 组件中包含多个构件,构件实现多个接口;
  59.             4.2 接口映射表(同一个构件上的接口进行映射);
  60.             4.3 构件映射表(同一个组件上构件的映射);
  61.             4.4 ATL应用程序实体; CComModule _Module;
  62.             4.3 ATL在DllMain方法中,组装COM组件;
  63.           MFC WinMain  CWinApp theApp 多个窗口 消息映射   
  64.           ATL           DllMain    CComModule _Module 多个构件 接口映射   构件映射
  65.           MFC initialInstance
  66.           ATL           _Module.init;
  67.  DllCanUnloadNow,判断组件是否能够卸载;
  68.      DllGetClassObject,被CoCreateInstance方法调用,生成构件;_Module.GetClassObject
  69.      DllRegisterServer,将组件的ID和名称的关联信息写入注册表;
  70.      DllUnregisterServer,将组件的ID和名称关联信息删除;
  71. 5.   COM数据类型列表;
  72.                 HRESULT,32整数;代表执行的结果;0表示正确,非零表示错误;
  73.                 BSTR,       宽字符串;使用Unicode码;(一个字符,两个字节)
  74.                                     前两个字节,对应字符串中字符个数,后面依次为UNICDODE码;
  75.                                    "hello",    [h][e][l][l][o][]
  76.                                                     [0][5][0][h][0][e][0][l][0][l][0][o]
  77.                 VARIANT    智能型数据类型;(万能型)
  78.                     vt属性,表示当前变量所用作的类型;
  79.                     值,根据类型不同在不同属性中;   
  80. 6. 动化接口;  不需要IDL文件;
  81.               1. 自动化接口,主要支持vb,javascript, vbscript, actionscript;调用时不需要头文件;
  82.               2.  自动化接口是对自定义接口的扩展, 自动化接口也从IUnknown继承;
  83.               3.  自动化接口从IDispatch继承;
  84.               4.   不使用头文件调用IDispatch接口;
  85.                     HRESULT Invoke( 
  86. DISPID dispIdMember,   //调用方法的id;
  87. REFIID riid, LCID lcid,    //保留字,IID_NULL;
  88. WORD wFlags,               //Local_system_default;
  89. DISPPARAMS FAR *pDispParams,  //
  90. VARIANT FAR *pVarResult,             //
  91. EXCEPINFO FAR *pExcepInfo, 
  92. unsigned int FAR *puArgErr);
  93.               5. CLSIDFromProgID,根据组建名字查找组建CLSID;
  94.               6. GetIDsOfNames;
  95.               7. DISPPARAMS; 
  96. 7.  COM中的结构,数组,智能指针
  97.               7.1 BSTR int  VARIANT,基本数据类型
  98.               7.2 自定义接口/结构;
  99.               7.3 DTO(只有成员变量,没有方法)
  100.               7.4 CoTaskMemAlloc/CoTaskMemFree;  SysAlloString/SysFreeString;
  101.               7.5 从COM中获取结构或结构数组;
  102.               7.6 向COM中传递结构或结构数组;
  103.               7.7 COM中的属性;
  104.               7.8 接口智能指针;CComPtr/CComQIPtr;
  105.               7.9   BSTR智能指针;_bstr_t(<comdef.h>)/CComBSTR(<atlbase.h>);
  106.               7.10 VARIATN智能指针;_variant_t   /CComVariant  ;
  107.               7.11 智能指针:1)是个类;2)管理一个指针;3)自动释放(析构)方法中释放;
  108.               7.12  智能指针分类(工具类Utility Class)
  109.                     7.12.1 COM接口类 CComPtr/CComQIPtr;
  110.                     7.12.2 字符串指针  CComBSTR/_bstr_t;
  111.                     7.12.2 万能型变量  CComVariant/_variant_t;
  112. 8.  COM回调接口;
  113.        8.1 自定义回调接口;
  114.             8.1.1 回调的概念;
  115.             8.1.2 回调三要素:1,回调接口定义;2,私有成员变量;3,公共的设置方法;       
  116.        8.2 自定义COM回调接口(IUnknown/IDispatch)
  117.             8.2.1 IUnknonw类型的回调接口;
  118.             8.2.2 实现IUnknown接口;
  119.            
  120.        8.3 COM事件的定义和处理
  121. 3.  COM组件的实现技术;
  122.        3.1 接口映射;
  123.        3.2 多接口实现;
  124. 4.  COM组件的回调和事件;
  125. 5.  COM组件的合成与集合;