- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自动化(Automation) 潘爱民 /CompCourse/ 内容 自动化基础 自动化对象实现 自动化对象应用 自动化编程 自动化产生与发展 弱类型的高级语言(比如Visual Basic)如何使用COM? VBA(或VBScript) 自动化与COM的关系 自动化的广泛应用 几个概念 自动化对象 实现了IDispatch接口的COM对象 属性和方法 ODL(对象描述语言) 类型库 自动化兼容的数据类型 属性(property)和方法(method) 自动化对象的两个基本特性,都具有符号化的名字,用DISPID来标识 属性是指自动化对象的数据特征 属性可以由索引,索引可以是整数,也可以是其他类型 方法是指自动化对象所提供的功能服务 方法比属性要灵活得多,可以包含参数 类型库(typelib) 类型信息是客户程序与组件对象之间通讯的基础 IDL和ODL 接口类型信息使用interface或dispinterface关键字描述 对象类型信息使用coclass关键字描述 library关键字描述库信息 一个组件程序中的所有对象放在一个ODL文件中,并用library关键字描述库信息 工具MIDL:从ODL(IDL)编译成TLB文件 ODL描述举例 ODL描述举例(续) 另一个ODL接口例子 IDispatch接口 分发ID(DISPID) 整数,0和负数有特殊含义 自动化接口通过分发ID管理方法和属性 客户与自动化对象交互示意图 IDispatch::Invoke 参数dispIdMember 指定DISPID 参数lcid 指定本地化标识 参数wFlags 指示调用类型 DISPATCH_METHOD、DISPATCH_PROPERTYGET、DISPATCH_PROPERTYPUT 、 DISPATCH_PROPERTYPUTREF 参数pDispParams 包括调用的参数数组、参数的DISPID数组、数组中参数个数等信息 参数pVarResult 保存返回值信息 参数pExcepInfo 保存异常信息 参数puArgErr 错误参数的索引值 自动化兼容的数据类型(一) 自动化兼容的数据类型(二) 自动化兼容的数据类型(三) 布尔型VARIANT_BOOL typedef short VARIANT_BOOL; /* 0 == FALSE, -1 == TRUE */ 货币类型CY typedef struct tagCY { unsigned long Lo; long Hi; } CY; 日期类型DATE 浮点数,整数部分表示自1899年12月30日以来的天数,小数部分为时间值 Basic字符串类型BSTR OLE提供了一组API函数处理BSTR: SysAllocString、SysAllocStringLen、SysFreeString、SysReAllocString、SysReAllocStringLen以及SysStringLen等 SAFEARRAY类型 OLE也提供了一套API函数用来处理SAFEARRAY结构 自动化数据类型的转换 Invoke函数的数据类型转换能力为弱数据类型开发环境提供了极大的便利 OLE提供了两个类型转换函数:VariantChangeType和VariantChangeTypeEx OLE也提供了一组专门的类型转换函数VartypeFromtype,比如VarR4FromI2、VarUI2FromDisp等 属性和方法调用的参数传递 Invoke函数的参数pDispParams typedef struct tagDISPPARAMS { VARIANTARG *rgvarg; // 参数数组 DISPID *rgdispidNamedArgs; // 参数的分发ID数组 UINT cArgs; // 数组中参数个数 UINT cNamedArgs; // 命名参数个数 } DISPPARAMS; 参数顺序 在rgvarg数组中,参数的顺序与客户程序中调用的参数左右顺序刚好相反 比如: Object.Method(arg1, arg2, arg3) 对应Invoke函数的pDispParams参数的DISPPARAMS结构中,cArgs为3,表明方法调用有3个参数,rgarg数组的成员分别为:arg3对应rgvarg[0]、arg2对应rgvarg[1]、arg1对应rgvarg[2]。 可选参数 ODL文件中,可以把方法的参数标记为可选的(optional) 可选参数也会出现在DISPPARAMS结构中 如果vt域
原创力文档


文档评论(0)