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

站删除

可抵御99%的攻击中国单域版cdn:9元/月7T防御 cloudsecre

官方网站:点击访问CDN客服QQ:123008公司名:贵州青辞赋文化传媒有限公司域名和IP被墙封了怎么办?用cloudsecre.com网站被攻击了怎么办?用cloudsecre.com问:黑客为什么要找网站来攻击?答:黑客需要找肉鸡。问:什么是肉鸡?答:被控的服务器和电脑主机就是肉鸡。问:肉鸡有什么作用?答:肉鸡的作用非常多,可以用来干违法的事情,通常的行为有:VPN拨号,流量P2P,攻击傀儡,...

CheapWindowsVPS$4.5/月,美国VPS/免费Windows系统/1Gbps不限流量/,可选美洲、欧洲、亚洲等8大机房

国外商家提供Windows系统的并不常见,CheapWindowsVPS 此次提供的 2 款 VPS 促销套餐,提供 5 折永久优惠码,优惠后月付 4.5 美元起,价格还是挺诱人的,VPS 不限流量,接入 1Gbps 带宽,8 个机房皆可选,其中洛杉矶机房还提供亚洲优化网络供选择,操作系统有 Windows 10 专业版、2012 R2、2016、Linux等。Cheap Windows VPS是...

ZJI:韩国BGP+CN2线路服务器,国内三网访问速度优秀,8折优惠码每月实付440元起

zji怎么样?zji最近新上韩国BGP+CN2线路服务器,国内三网访问速度优秀,适用8折优惠码zji,优惠后韩国服务器最低每月440元起。zji主机支持安装Linux或者Windows操作系统,会员中心集成电源管理功能,8折优惠码为终身折扣,续费同价,全场适用。ZJI是原Wordpress圈知名主机商:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服...

meilishuo com为你推荐
笔记本内存价格笔记本加一个8g运行内存条要多少钱,加人工费燃气热水器和电热水器哪个好燃气热水器好还是电热水器好?宝来和朗逸哪个好朗逸和宝来那个比较好些各方面苹果手机助手哪个好最新版iphone助手 PP助手好用吗?游戏盒子哪个好游戏盒子哪个好?清理手机垃圾软件哪个好清理手机垃圾的软件哪个好qq空间登录器怎样直接登录QQ空间辽宁联通网上营业厅我进入到的中国联通微信营业厅,该如何进入到人工服务啊?电信dns服务器地址电信现在DNS服务器地址是多少上海dns服务器地址上海浦东新区dns是多少
荷兰vps kvmla 加勒比群岛 电影服务器 外贸主机 cpanel 42u标准机柜尺寸 美国php空间 qq数据库 我爱水煮鱼 双拼域名 免费高速空间 免费cdn 卡巴斯基免费试用版 美国独立日 空间首页登陆 美国盐湖城 德讯 服务器硬件配置 好看的空间 更多