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

站删除

10gbiz七月活动首月半价$2.36/月: 香港/洛杉矶CN2 GIA VPS

10gbiz怎么样?10gbiz 美国万兆带宽供应商,主打美国直连大带宽,真实硬防。除美国外还提供线路非常优质的香港、日本等数据中心可供选择,全部机房均支持增加独立硬防。洛杉矶特色线路去程三网直连(电信、联通、移动)回程CN2 GIA优化,全天低延迟。中国大陆访问质量优秀,最多可增加至600G硬防。香港七星级网络,去程回程均为电信CN2 GIA+联通+移动,大陆访问相较其他香港GIA线路平均速度更...

sharktech:老牌高防服务器商,跳楼价,1G独享$70、10G共享$240、10G独享$800

不知道大家是否注意到sharktech的所有服务器的带宽价格全部跳楼跳水,降幅简直不忍直视了,还没有见过这么便宜的独立服务器。根据不同的机房,价格也是不一样的。大带宽、不限流量比较适合建站、数据备份、做下载、做流媒体、做CDN等多种业务。 官方网站:https://www.sharktech.net 付款方式:比特币、信用卡、PayPal、支付宝、西联汇款 以最贵的洛杉矶机器为例,配置表如...

PQ.hosting全线9折,1Gbps带宽不限流量VPS/€3/月,全球11大机房可选

Hostadvice主机目录对我们的服务进行了测试,然后给PQ.hosting颁发了十大WordPress托管奖。为此,宣布PQ.Hosting将在一周内进行折扣优惠,购买和续订虚拟服务器使用优惠码:Hostadvice ,全部优惠10%。PQ.hosting,国外商家,成天于2019年,正规公司,是全球互联网注册商协会 RIPE 的成员。主要是因为提供1Gbps带宽、不限流量的基于KVM虚拟的V...

meilishuo com为你推荐
国内免备案服务器不知道国内有没有不需要备案的服务器啊美团月付怎么关闭美团月账单消费记录怎撤除啊?麒麟990和骁龙865哪个好海思麒麟990和骁龙710哪个好?法兰绒和珊瑚绒哪个好请问天鹅绒法兰绒和珊瑚绒哪个好啊 想买套床上用品音乐播放器哪个好目前音质最好的音乐播放器网络机顶盒哪个好什么牌子的网络机顶盒最好qq空间登录网页版求这张图的原图,是QQ空间最近网页版登录界面的背景qq空间登录网站QQ空间打开需要输入用户名和密码,下面是正在连接一个网址和领域网址google广告申请申请Google广告要多长时间呢东莞电信宽带在东莞报装办理电信宽带好不好用,需要多少钱,在哪里报装
深圳虚拟主机 双线服务器租用 vps动态ip vps代购 xenvps 域名服务器是什么 virpus bandwagonhost 狗爹 国外服务器网站 bash漏洞 轻量 网通ip 架设服务器 北京双线 卡巴斯基破解版 无限流量 国外在线代理服务器 成都主机托管 攻击服务器 更多