自动化COM自动化

meilishuo com  时间:2021-01-21  阅读:()

精品学习资料---收集网络如有侵权请联系网

站删除

C O M 自 动 化  第 一 部 分--------------------------------------------------------------

------------------

在这部分和以后的内容中我们将深入COM自动化世界。希望用一个简要的专栏来研究这个题目。我们将谈论怎样进行自动化IDisp atch调用和处理自动化对象需要做什么。然后我们将讨论用于自动化的特殊COM数据类型和研究双重接口。

自动化从前叫做OLE 自动化是一个和迄今为止我们曾认为标准COMvtable接口完全不同的客户调用服务器方法。

自动化是使用标准C OM接口IDisp atch来存取对象的自动化接口。 因此 我们说任何实现ID isp atch的对象实现了自动化。

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

为什么要自动化

最初开发自动化是作为一种应用程序(例如Word和Excel)用以把其功能显露给其他应用,包括脚本语言的方式。 目的是提供一种简单方式来访问属性和调用方法这种方式尽可能少的占用自动化客户的资源并且不需要被访问对象的类型信息就可以进行调用的方法。

在C++头文件中描绘接口的类型信息决不是浪费时间描绘方法的vtable偏移量也很重要最困难的是设置正确的C++堆栈框架以便正确的执行方法调用。对一个基于文本的解释语言所有这些尤其需要技巧。

如果每个脚本语言都不得不做这个机灵的程序那么很少有能存取COM对象的了。使用自动化对象就可以提供一个简单的自动化接口这样脚本语言作者只需掌握IDisp atch和几个COM应用程序接口就可以了。

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

VisualBasic的第一个32位版使用自动化存取OLE控件现在叫Active X控件他代替了16位的VisualBasic的VBX控件。VisualBasic仍然可以使用自动化存取一个控件的属性和方法但是更近的版本也支持使用标准COMvtab le接口。这次我们创建的例子将使用自动化接口。

脚本语言 例如VisualBasicforApplications、VB S cript和J/S cript 以独占模式使用自动化。所以如果你想要你的对象可以被脚本语言使用你必须实现一个自动化接口。

对象和属性和方法噢我的上帝

世界上关于自动化有三个主要概念。对象是最重要的概念。对象显露属性和方法。

图1.自动化对象的属性和方法

把这个与更复杂的世界的COM观点对比在这种观点中是接口而不是对象是第一位的精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

而属性是不存在的并且每个对象能有多个包含多个方法的接口。

图2.COM对象接口方法包括没有标签的IUnknown

方法与C++成员函数相似而自动化的属性则与C++数据成员和实例数据也叫属性相似。注意接口没有独立的概念每个对象有一个自动化接口。进一步注意到COM接口没有属性的概念它们只有方法。 但是我们可以使用ge t/s et方法对模拟属性。

自动化对象怎样被创建

创建一个自动化对象是一个简单的操作。这儿我将使用VisualBasic作为例子但是在任何兼容自动化的语言中方法基本上一样。

在VisualBasic你应先创建一个对象变量DimBeeperasObject

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

……接着设置它指向一个特殊的对象

SetBeeper=CreateObject("BeepCntMod.BeepCnt")在这个例子中我们创建了一个B e ep Cnt对象见第一篇ATL文章,这篇文章将会在以后刊出-译者注。

我们可以接着调用对象上的方法控制它的属性就像我们不久将看到的。

但是首先让我们讨论VisualBasic 或者任何自动化客户程序在幕后真正做什么。

我们早已知道我们将通过IDi sp atch C OM接口访问自动化对象。所以D IM语句只显示集合至少需要的内存因此VisualBasic能为我们即将创建的对象访问IDisp atch指针。

Cre ate Obj e ct调用需要有一点技巧。首先GUID在哪里对象的C L S ID没有GUID我们怎样创建它

精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

你可以重新调用这样我们可以通过对象的ProgID引用对象类型。你也可以重新调用我们在注册表用ProgID作为键名注册的一个键。该键用一个C L S ID作为子键。

COM提供一个叫CLSIDFromProgID的函数它根据给出的ProgID查找CLSID。VisualBasic用我们传送到CreateObj ect的字符串调用这个函数。 在这个例子中 VisualBasic将传送"BeepCntMod.BeepCnt"。CLSIDFromProgID查阅那个键和返回与它相关的C L S ID。 顺便说一句ProgID的第一部分是模块或应用程序名第二部分是模块或应用程序中的对象名。 

在这一点上VisualBasic调用我们的老朋友Co CreateInstanceEx  传送 CLS ID和请求IDispatch接口。如果CoCreateInstanceEx成功VB创建一个包含由CoCreateInstanceEx收到的ID isp atch指针的对象变量并且把它分配给我们精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

的对象变量。

如果因任何原因创建失败对象不存在或者它没实现IDisp atch则对CreateObj ect的调用失败。就像你所看到的 VisualBasic 或任何自动化客户的开销是最小的所有必须知道的是用两个简单的COM函数创建对象。

那么你怎样访问自动化属性和方法

访问我们的对象的VisualBasic源代码可能像下面这样

BC=Beeper.Count

Beeper.Count=5

Beeper.Beep

这三个语句分别访问一个属性、设置一个属性和调用一个方法都只使用了两种ID i sp at ch方法GetIDsO fName s 和 Invoke 。精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

IDispatch: :GetID sO fNames获得与方法或属性的文本名有关的整型ID。VisualB asic调用它发现"Beep 嘟嘟响 "对应ID 1和"Count 计数 "对应ID 2。当我们调用ID i sp at ch: :In vo ke时我们需要这些叫做disp id s的ID。

所有现行的自动化属性和方法访问都是通过调用IDisp atch: :In voke实现。换句话说你的自动化客户要访问自动化对象所必须知道是几个简单的COM调用。如果你的执行语言不是C或C++你可以为你的运行时间编写帮助者来做那些调用所以从任何程序使用自动化是简单的。也许很简单但并不是不重要 ID i sp at ch: :In vo ke接收一批参数所有的参数必须被正确设置。最重要的是

一个叫disp id的整型ID它指定要被访问的属性和方法我们通过调用包含属性或方法名的字符精品学习资料---收集网络如有侵权请联系网

站删除

精品学习资料---收集网络如有侵权请联系网

站删除

串的GetIDsOfName s获得它。

一个包含一列参数指针的结构。 每个参数被存储到包含一个典型标记和一个叫vari an t的共用体的结构中。

一个包含指向属性设置它、获得它、用一个引用设置它或者方法调用它数列的指针的结构。

一个作为属性获取的或者是方法调用返回的返回值参数也是一个变量。

噢万一你想本地化方法、属性、名字化参数名或参数值 Invoke和GetIDsO fName s都接受一个本地ID。

In vo ke也有几个其他参数可以把错误信息传递给自动化客户。在这里我们将假定我们处在一个完美的世界暂时不考虑它们。

变量Vari ant以16个字节存储。前两个字节是一个标记包含一个代表变量类型的数其次的六个字节填满最后的八个字节是变量的值。精品学习资料---收集网络如有侵权请联系网

站删除

LOCVPS全场8折,香港云地/邦联VPS带宽升级不加价

LOCVPS发布了7月份促销信息,全场VPS主机8折优惠码,续费同价,同时香港云地/邦联机房带宽免费升级不加价,原来3M升级至6M,2GB内存套餐优惠后每月44元起。这是成立较久的一家国人VPS服务商,提供美国洛杉矶(MC/C3)、和中国香港(邦联、沙田电信、大埔)、日本(东京、大阪)、新加坡、德国和荷兰等机房VPS主机,基于XEN或者KVM虚拟架构,均选择国内访问线路不错的机房,适合建站和远程办...

华纳云CN2高防1810M带宽独享,三网直cn218元/月,2M带宽;独服/高防6折购

华纳云怎么样?华纳云是香港老牌的IDC服务商,成立于2015年,主要提供中国香港/美国节点的服务器及网络安全产品、比如,香港服务器、香港云服务器、香港高防服务器、香港高防IP、美国云服务器、机柜出租以及云虚拟主机等。以极速 BGP 冗余网络、CN2 GIA 回国专线以及多年技能经验,帮助全球数十万家企业实现业务转型攀升。华纳云针对618返场活动,华纳云推出一系列热销产品活动,香港云服务器低至3折,...

HostKvm($4.25/月),俄罗斯CN2带宽大升级,俄罗斯/香港高防限量5折优惠进行中

HostKvm是一家成立于2013年的国外VPS服务商,产品基于KVM架构,数据中心包括日本、新加坡、韩国、美国、俄罗斯、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。本月,商家旗下俄罗斯、新加坡、美国、香港等节点带宽进行了大幅度升级,俄罗斯机房国内电信/联通直连,CN2线路,150Mbps(原来30Mbps)带宽起,目前俄罗斯和香港高防节点5折骨折码继续优惠中...

meilishuo com为你推荐
浏览器哪个好目前什么浏览器最好用?输入法哪个好用五笔输入法哪个最好用燃气热水器和电热水器哪个好电热水器和燃气热水器的优缺点,那个更实用?苹果手机助手哪个好苹果手机助手哪个好网校哪个好市面上的网校,谁最好?美国国际集团世界五百强企业前五十名是哪些?空间登录页面登录QQ空间时,如何使登陆界面不直接进入个人中心?YunOSyunos是什么手机东莞电信网上营业厅电信网上营业厅广东电信360云盘下载下载一个360云盘,怎么下载
紧急升级请记住新域名 老左 阿里云搜索 lunarpages 外国服务器 国外空间服务商 英语简历模板word NetSpeeder 三拼域名 老左来了 亚马逊香港官网 下载速度测试 国外网页代理 博客域名 碳云 winds 时间服务器 godaddy中文 web服务器 gotoassist 更多