欢迎来到天天文库
浏览记录
ID:6320984
大小:180.50 KB
页数:2页
时间:2018-01-10
《对象与组件技术考试》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.组件的两种形式:进程内组件、进程外组件。进程内组件:DLL形式的组件。客户程序调用组件程序的服务时,会把组建成像装入到自己的进程中,所以客户程序和组件程序运行在统一进程空间中。进程外组件:EXE形式的组件。组件程序在被调用时用有自己的进程空间,所以客户程序与组件程序运行在不同的进程空间中。2.引出函数的两种方法:传统方法:首先用extern“C”和_stdcall修饰函数,比如:Extern“C”int_stdcallmyFuction(intn);然后编写一个DEF文件,用于描述DLL的相关信息。直接说明:可以通过_
2、declspec(dllexport)说明符直接说明引出函数:Extern“C”_declspec(dllexport)int_stdcallmyFuction(intn);3.(大题)COM对象的创建过程:①通过调用组件程序的引出函数CreatObject;②调用COM库的函数进行组件对象的创建工作,COM库的创建函数根据注册表的信息并调用组件程序的入口函数来创建组件对象。4.(大题)类厂的C++定义和实现,给一个对象组件,写出对应类厂及实现。类厂:生产COM对象的工厂;每个COM类都有一个类厂,专门用于生产该类COM对
3、象;类厂本身也是一个COM对象,支持一个特殊的接口IClassFactory。类厂的C++类定义:ClassCDictionaryFactory:publicIClassFactory{protected:ULONGm_Ref;public:CDictionaryFactory(void);~CDictionaryFactory(void);//IUnknownmembersHRESULTQueryInterface(constIID&iid,void**ppv);ULONGAddRef();ULONGRelease();
4、//IClassFactorymembersHRESULTCreateInstance(IUnknown*,constIID&iid,void**ppv);HRESULTLockServer(BOOL);}:5.创建类厂的三个函数CoGetClassObject、CoCreateInstance和CoCreateInstanceEx。通常情况下,客户程序调用其中之一完成对象的创建,并返回对象的初始接口指针。COM库与类厂也通过这三个函数进行交互。(由客户用、由COM库用)。客户程序调用COM库创建组件对象的顺序:①CoCr
5、eateInstance调用CoGetClassObject函数;②COM库找到DLL程序并进入进程;③调用DLLGetClassObject函数;④DLLGetClassObject函数创建类厂;⑤DLLGetClassObject函数把类厂接口指针返回给CoGetClassObject函数;⑥CoGetClassObject函数把类厂接口指针返回给CoCreateInstance函数;⑦CoCreateInstance函数得到类厂后,调用类厂的对象创建函数;⑧类厂创建COM对象;⑨类厂把COM对象返回给CoCreate
6、Instance函数,CoCreateInstance函数返回;⑩客户直接调用COM对象。每个函数、参数有什么用?伪代码?7.三个COM库函数:⑴CoGetClassObject。CoGetClassObject函数先找到由clsid指定的COM类的类厂,然后连接到类厂对象,如果需要的话,CoGetClassObject函数装入组件代码。⑵CoCreateInstance。CoCreateInstance是一个被包装过的辅助函数,在它的内部实际上也调用了CoGetClassObject函数。CoCreateInstance
7、函数首先利用CoGetClassObject函数创建类厂对象,然后用得到的类厂对象的接口指针创建真正的COM对象,最后把类厂对象释放掉并返回。⑶CoCreateInstanceEx。如果要创建远程对象,可以使用CoCreateInstance的扩展函数CoCreateInstanceEx。8.三个创建函数选用原则:①如果客户创建远程对象或者希望一次获取对象的多个接口指针,则选用CoCreateInstanceEx函数;②如果客户希望获取类厂对象或者要调用类厂的某些成员函数,则选用CoGetClassObject函数;③在其
8、他情况下,使用CoCreateInstance函数创建对象,这是最常用的方法。9.类厂对组件生存期的控制:①一般情况下,客户程序只有在创建COM对象时才使用类厂对象的接口指针,创建完后就把类厂对象释放掉,以后再创建COM对象,可以再获取类厂对象。②如果客户程序保留了类厂的接口指针,想以后继续使用,则必须
此文档下载收益归作者所有