对象与组件技术考试.doc_第1页
对象与组件技术考试.doc_第2页
对象与组件技术考试.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 组件的两种形式:进程内组件、进程外组件。进程内组件:DLL形式的组件。客户程序调用组件程序的服务时,会把组建成像装入到自己的进程中,所以客户程序和组件程序运行在统一进程空间中。进程外组件:EXE形式的组件。组件程序在被调用时用有自己的进程空间,所以客户程序与组件程序运行在不同的进程空间中。2. 引出函数的两种方法:传统方法:首先用extern “C”和_stdcall修饰函数,比如:Extern “C” int _stdcall myFuction(int n);然后编写一个DEF文件,用于描述DLL的相关信息。直接说明:可以通过_declspec(dllexport)说明符直接说明引出函数:Extern “C” _declspec(dllexport) int _stdcall myFuction(int n);3. (大题)COM对象的创建过程:通过调用组件程序的引出函数CreatObject;调用COM库的函数进行组件对象的创建工作,COM库的创建函数根据注册表的信息并调用组件程序的入口函数来创建组件对象。4. (大题)类厂的C+定义和实现,给一个对象组件,写出对应类厂及实现。类厂:生产COM对象的工厂;每个COM类都有一个类厂,专门用于生产该类COM对象;类厂本身也是一个COM对象,支持一个特殊的接口IClassFactory。类厂的C+类定义:Class CDictionaryFactory:public IClassFactoryprotected:ULONG m_Ref;public:CDictionaryFactory(void);CDictionaryFactory(void);/IUnknown membersHRESULT QueryInterface(const IID& iid,void *ppv);ULONG AddRef();ULONG Release();/IClassFactory membersHRESULT CreateInstance(IUnknown *,const IID& iid,void *ppv);HRESULT LockServer(BOOL);:5. 创建类厂的三个函数CoGetClassObject、CoCreateInstance和CoCreateInstanceEx。通常情况下,客户程序调用其中之一完成对象的创建,并返回对象的初始接口指针。COM库与类厂也通过这三个函数进行交互。(由客户用、由COM库用)。客户程序调用COM库创建组件对象的顺序:CoCreateInstance调用CoGetClassObject函数;COM库找到DLL程序并进入进程;调用DLLGetClassObject函数;DLLGetClassObject函数创建类厂;DLLGetClassObject函数把类厂接口指针返回给CoGetClassObject函数;CoGetClassObject函数把类厂接口指针返回给CoCreateInstance函数;CoCreateInstance函数得到类厂后,调用类厂的对象创建函数;类厂创建COM对象;类厂把COM对象返回给CoCreateInstance函数,CoCreateInstance函数返回;客户直接调用COM对象。每个函数、参数有什么用?伪代码?7.三个COM库函数:CoGetClassObject。CoGetClassObject函数先找到由clsid指定的COM类的类厂,然后连接到类厂对象,如果需要的话,CoGetClassObject函数装入组件代码。CoCreateInstance。CoCreateInstance是一个被包装过的辅助函数,在它的内部实际上也调用了CoGetClassObject函数。CoCreateInstance函数首先利用CoGetClassObject函数创建类厂对象,然后用得到的类厂对象的接口指针创建真正的COM对象,最后把类厂对象释放掉并返回。CoCreateInstanceEx。如果要创建远程对象,可以使用CoCreateInstance的扩展函数CoCreateInstanceEx。8. 三个创建函数选用原则:如果客户创建远程对象或者希望一次获取对象的多个接口指针,则选用CoCreateInstanceEx函数;如果客户希望获取类厂对象或者要调用类厂的某些成员函数,则选用CoGetClassObject函数;在其他情况下,使用CoCreateInstance函数创建对象,这是最常用的方法。9.类厂对组件生存期的控制:一般情况下,客户程序只有在创建COM对象时才使用类厂对象的接口指针,创建完后就把类厂对象释放掉,以后再创建COM对象,可以再获取类厂对象。如果客户程序保留了类厂的接口指针,想以后继续使用,则必须采取措施,保证组件仍在内存,因为组件的引用计数不对类厂计数,当所有COM对象释放后,组件程序可能就不在内存了。解决办法:通过LockServer实现锁定或解锁。原理:与组件的引用计数类似。说明:引入锁机制后,判断一个组件程序是否可以被卸出内存的条件就变成了:引用计数为0且锁计数为0。10. 什么是COM库:COM定义了组件程序与客户程序交互的规范,也提供了COM的实现部分即COM库。COM库充当了组件程序和客户程序之间的桥梁,尤其是组件对象的创建过程中,以及在对象管理、内存管理和一些标准化操作等方面起着重要作用。11组件程序的装载和卸载:客户程序是在运行时刻与组件程序建立连接的,一旦连接起来以后,客户程序和组件程序的通讯是直接进行的,并不需要COM库的参与。组件程序的装载是在客户创建第一个组件对象时进行的;其卸载是在最后一个组件对象被释放之后进行的.组件的装载与释放不是由客户程序直接完成的,而是在COM库中完成的。组件程序的装载和卸载( 续) 进程内组件的装载:客户程序调用COM的下面两个函数之一,完成进程内组件的装载:CoGetClassObject和CoCreateInstance。进程外组件的装载:客户程序仍然调用上面的两个函数之一,但运行时若发现组件程序是EXE程序,COM库会创建一个进程来启动组件程序,并带上“/Embedding”命令行参数。l 进程内组件的卸载:客户程序调用CoFreeUnusedLibraries完成卸载。l 进程外组件的卸载:main或者WinMain函数退出自动卸载。12.进程内组件与客户的协作过程(83页):13.组件:可独立发布的二进制单元。 COM即组件对象模型,是一种以组件为发布单元的对象模型。 接口:对象或组件的通信协议。实现:对象或组件的内部细节。 在Windows平台上,一个COM组件可以是DLL文件,也可以是EXE文件。 一个组件程序可以包含多个COM对象,并且每个COM对象可以实现多个接口。 对象是每个类的一个实例;类则是一组相关数据和功能组合在一起的一个定义。 使用对象的应用成为客户。接口是一组逻辑上相关的函数集合,其函数成为接口成员函数。 每一个接口都有128位的全局唯一标识符(GUID)来标识。 COM对象也有一个128位GUID来标识成为CLSID(类标识符或类ID)。(保证唯一性) COM是客户/服务器模型。 COM特性:面向对象特性、客户/服务器特性、语言无关性、对进程的透明性、可充用机制、多线程性、可扩展性。 接口是它与外界进行交互的唯一途径。14.可充用模型:包容和聚合。 列集:客户进程可以透明的调用另一进程的对象成员函数的一种参数处理机制。 散集:列集的反过程。15.类厂接口IClassFactory定义如下:class IClassFactory : public IUnknownvirtual HRESULT _stdcall CreateInstance(IUnknown *pUnknownOuter, const IID& iid, void *ppv ) = 0;virtual HRESULT _stdcall LockServer(BOOL bLock) = 0;16.IUnknown接口提供了两个非常重要的特性:生存期控制和接口查询。Iunknown的IDL定义:Interface IUnknownHRESULT QueryInterface( in REFIID iid, out void * ppv ) ;ULONG AddRef( void ) ; ULONG Release( void ) ;17.实现一个进程内COM组件的步骤:l 定义组件接口及必要的CL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论