1、二、二、COMCOM服务器、服务器、COMCOM对象、对象、COMCOM接口和函数的关系接口和函数的关系 1.1.一个一个COMCOM服务器(服务器(DLLDLL或或EXEEXE)可以包含若干个)可以包含若干个 COM COM对象;对象;2.2.一个一个COMCOM对象可以包含若干个接口;对象可以包含若干个接口;3.3.一个接口可以包含若干个函数。一个接口可以包含若干个函数。COM服务器服务器COM对象对象1接口接口1函数函数1函数函数2接口接口2函数函数1COM对象对象2接口接口1函数函数1函数函数2函数函数3IInterface_1IInterface_2COM服务器服务器接口对象接口对象
2、1函数函数1函数函数2接口对象接口对象2函数函数1IUnknownCOMCOM对象表示为带固定格式的圆形接头,对象表示为带固定格式的圆形接头,每个接头表示一个对外提供的接口,每个接头表示一个对外提供的接口,IUnknownIUnknown接接 口处首要地位口处首要地位.三、接口接口 1.COM1.COM接口提供访问对象的一种方式,应用程序只能通过一个接接口提供访问对象的一种方式,应用程序只能通过一个接 口指针访问对象的函数。口指针访问对象的函数。COMCOM接口由一个接口由一个 2.2.所有所有COMCOM接口都从接口都从IUnknownIUnknown接口派生接口派生 其中:其中:名词解释名
3、词解释IUnknownIUnknown、IClassFactoryIClassFactory、IDispatchIDispatch IClassFactoryIClassFactory(类工厂)是为访问一个(类工厂)是为访问一个COMCOM服务器(服务器(DLLDLL 或或EXEEXE)中包含多个)中包含多个COMCOM对象中的接口对象提供的接口对象中的接口对象提供的接口 类。类。IClassFactoryIClassFactory声明如下:声明如下:IClassFactory:public IUnknownIClassFactory:public IUnknown public:public
4、:virtual virtual HRESULT STDMETHODCALLTYPE CreateInstance(HRESULT STDMETHODCALLTYPE CreateInstance(IUnknown IUnknown*pUnkOuter,pUnkOuter,REFIID riid,REFIID riid,void void*ppvObject)=0;ppvObject)=0;virtual virtual HRESULT STDMETHODCALLTYPE LockServer(HRESULT STDMETHODCALLTYPE LockServer(BOOL fLock)=0
5、;BOOL fLock)=0;说明:说明:IClassFactory IClassFactory 派生于派生于IUnknownIUnknown,因此它仍然支持标准的,因此它仍然支持标准的 IDispatchIDispatch(双重接口)是为和其他语言兼容提供的接口类(双重接口)是为和其他语言兼容提供的接口类 IDispatch IDispatch声明如下:声明如下:二、利用二、利用ATL ATL 向导建立向导建立COMCOM注意本章使用注意本章使用在此处填写在此处填写“IClassOne”IClassOne”添加的接口函数如下:添加的接口函数如下:对话框进行如下设置:对话框进行如下设置:*使用
6、类向导给使用类向导给其中其中DEFDEF文件中文件中4 4个函数的作用是:个函数的作用是:DllCanUnloadNowDllCanUnloadNow 当调用结束时负责卸载当调用结束时负责卸载COMCOM DllGetClassObjectDllGetClassObject 客户程序通过它访问客户程序通过它访问COMCOM,它创建由,它创建由 CLSIDCLSID制定类型的对制定类型的对 象,该对象就是在客户程序中调用象,该对象就是在客户程序中调用CoCreateInstance()CoCreateInstance()中请求对象中请求对象 的类工厂。的类工厂。DllRegisterServer
7、DllRegisterServer 在注册表中注册该在注册表中注册该COMCOM组件(服务器)组件(服务器)注意:当在命令行中执行注意:当在命令行中执行 例如:例如:regsvr32 D:D:ComDllComDllDebugComDll.dll DllUnregisterServerDllUnregisterServer 从注册表中卸载该从注册表中卸载该COMCOM组件(服务器)组件(服务器)注意:当在命令行中执行注意:当在命令行中执行 例如:例如:regsvr32-u D:ComDllComDllDebugComDll.dll说明:说明:ATLATL是自注册的,即在生成是自注册的,即在生成DLLDLL或或EXEEXE时自动组册时自动组册测试程序之建立测试程序之建立DllGetClassObjectDllGetClassObject()()实例化组件对象实例化组件对象 (类工厂)的函数。(类工厂)的函数。DllGetClassObjectDllGetClassObject()()函数用该类标识符实例化组件对象函数用该类标识符实例化组件对象编译、运行结果编译、运行结果测试程序之建立测试程序之建立 此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢