自动化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个字节存储。前两个字节是一个标记包含一个代表变量类型的数其次的六个字节填满最后的八个字节是变量的值。精品学习资料---收集网络如有侵权请联系网

站删除

IMIDC日本多IP服务器$88/月起,E3-123x/16GB/512G SSD/30M带宽

IMIDC是一家香港本土运营商,商家名为彩虹数据(Rainbow Cloud),全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。目前主机商针对日本独立服务器做促销活动,而且提供/28 IPv4,国内直连带宽优惠后每月仅88美元起。JP Multiple IP Customize...

美国G口/香港CTG/美国T级超防云/湖北高防云服务器物理机促销活动 六一云

六一云 成立于2018年,归属于西安六一网络科技有限公司,是一家国内正规持有IDC ISP CDN IRCS电信经营许可证书的老牌商家。大陆持证公司受大陆各部门监管不好用支持退款退现,再也不怕被割韭菜了!主要业务有:国内高防云,美国高防云,美国cera大带宽,香港CTG,香港沙田CN2,海外站群服务,物理机,宿母鸡等,另外也诚招代理欢迎咨询。官网www.61cloud.net最新直销劲爆...

天上云:香港大带宽物理机服务器572元;20Mbps带宽!三网CN2线路

天上云服务器怎么样?天上云是国人商家,成都天上云网络科技有限公司,专注于香港、美国海外云服务器的产品,有多年的运维维护经验。世界这么大 靠谱最重,我们7*24H为您提供服务,贴心售后服务,安心、省事儿、稳定、靠谱。目前,天上云香港大带宽物理机服务器572元;20Mbps带宽!三网CN2线路,香港沙田数据中心!点击进入:天上云官方网站地址香港沙田数据中心!线路说明 :去程中国电信CN2 +中国联通+...

meilishuo com为你推荐
绿色桌面背景图片求高清绿色风景桌面壁纸锦天城和君合哪个好和君咨询(王明夫为董事长)到底怎么样?有人说很好,空间大;也有人说像待遇差。免费阅读小说app哪个好什么小说软件好用又免费绝地求生加速器哪个好绝地求生哪个加速器好用一点,求推荐一个无纺布和熔喷布口罩哪个好医用 口罩里面是无纺布好还是过滤纸好手机管家哪个好手机管家和腾讯手机管家哪个好用播放器哪个好什么播放器好用51空间登录手机怎么登陆51空间啊qq空间登录电脑手机怎么登qq空间电脑版?首选dns服务器地址首选DNS服务器地址是什么东西
备案域名出售 主机点评 韩国电信 免费ddos防火墙 e蜗牛 52测评网 免费个人空间申请 web服务器的架设 已备案删除域名 hinet 新家坡 双线机房 沈阳主机托管 镇江高防 黑科云 上海联通 香港ip 免费获得q币 碳云 魔兽世界服务器维护 更多