您所在位置: 网站首页 / 自动化对象PPT.ppt / 文档详情
自动化对象PPT.ppt 立即下载
2024-12-16
约9.2千字
约28页
0
494KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

自动化对象PPT.ppt

自动化对象PPT.ppt

预览

免费试读已结束,剩余 23 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

十一.自动化对象1类型库一个类型库可以包含多个COM对象,这些COM对象可以实现多个接口,而且一般而言实现了IDispatch接口(不是必须).为了标识这些类型库,也使用GUID来作为它的唯一标识LIBID.并且也在注册表中注册,注册位置是HKEY-CLASSES_ROOT\TypeLib,注册内容主要指明类型库所描述的对象的载体(dll文件等)的位置.
VB,Java等语言的开发者不需要直接面对类型库.相反,它是由编译器环境(VB虚拟机,Java虚拟机)来解释它.这样它使得开发者在开发期能够浏览接口的相关信息.(以VB为例,通过Reference添加对类型库的引用后,使用ObjectBrowser就可以查看COM接口了,另一个工具OLE/COMObjectViewer使用更加方便).而开发人员只需要使用宿主语言简单的语法,非常方便地使用COM.(烦心事交给编译器的开发者去吧!我们看到,如果不是使用COM,而是以一般的库函数的形式,在VB这样的高端应用中使用起来就没有这么简便(对最终开发者而言).每一样复杂的技术,在使用者的舒适的背后,是底层开发者的艰辛)
当然,如果愿意,C++编译器也可以利用类型库.VisualC++IDE中的ClassWizard和C++BuilderIDE,DElphi中的importTypeLibrary命令都可以读入组件的类型库,并利用其中的信息产生C++代码。客户程序利用这些代码可以使用COM组件。并不是只有IDE的开发者才知道怎样解析类型库.为了操作类型库,Windows提供了一些API(LoadTypeLib和LoadRegTypeLib等)和COM接口(ITypeLib和ITypeInfo等).
LoadTypeLib可以根据指定的文件名装载类型库,并返回ITypeLib接口.
使用LoadRegTypeLib可以根据类型库的LIBID查找注册表,找到类型库文件,返回ITypeLib接口.
ITypeLibGetTypeInfoofGuid根据接口的IID或者使用GetTypeInfo根据接口在类型库中的索引号可以返回ITypeInfo接口.
ITypeInfo接口则代表了接口的全部信息.包括有哪些方法,方法的签名等等.如果接口是IDispatch接口,则还可以使用GetIDsofNames函数来根据方法的名字得到其分发ID,并使用Invoke函数通过方法的分发ID来执行这个方法.
因此,为了在编译时刻了解接口的信息,客户程序要么得到COM组件的IDL文件(使用头类型定义头文件,在代码中通知编译器接口的类型,如C++),要么得到它的类型库文件(代码中没有准确的信息,由IDE环境从类型库中读取接口类型信息,如VB),才能顺利地构造客户应用程序,从而使用COM对象.
无论是通过头文件,还是通过类型库,我们在开发客户程序时都有关于接口的先验知识.这些先验信息帮助我们顺利地编译客户程序.这种方式我们有时称为静态调用,或者早绑定(earlybinding).
但是,还存在这样的情况,有的语言在开发过程中并没有经过编译阶段,而是直接以源代码的形式被配置发布.在运行时才被解释运行.比如以HTML为基础的脚本语言.(VBScript,JavaScript等).它们在浏览器或Web服务器的环境中执行.脚本代码以纯文本的形式嵌入在HTML文件中.为了丰富脚本的功能,它们也可以创建COM对象,执行特殊的功能,比如访问数据库等等.比如:
varobj=newActiveXObject(“LuBenjie.AutoObj");
	alert(obj.Hello());
对象自身要帮助脚本解释器,将文本形式的脚本代码翻译为有意义的方法调用.这种方式我们称为动态调用,或者晚绑定(latebinding).
为了支持晚绑定,COM定义了一个接口,用来表达这种翻译机制,这个接口就是IDispatch.分发接口有时称为自动化接口,实现了此接口的对象称为自动化对象.
自动化接口的定义如下:
classIDispatch:publicIUnkown
{public:HRESULTGetTypeInfoCount(unsignedintFAR*pctinfo);
//如果对象提供类型支持,则返回1,否则0.客户在获取类型信息之前先使用此函数进行判断.
HRESULTGetTypeInfo(unsignedintiTInfo,LCIDlcid,ITypeInfoFAR*FAR*ppTInfo);
//一般给iTInfo赋值0,返回指向对象类型信息的ITypeInfo接口指针,通过ITypeInfo接口可以访问该自动化接口的所有类型信息.
HRESULTGetIDsOfNames(REFIIDriid,OLECHARFAR*FAR*rg
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

自动化对象PPT

文档大小:494KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用