问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...时错误(0x800A01B6)-->对象不支持此属性或方法怎么解决,急去、需...

发布网友 发布时间:2024-03-06 21:50

我来回答

1个回答

热心网友 时间:2024-06-13 14:17

并非所有对象都支持所有属性和方法。此错误有以下原因和解决方法:

1.指定的方法或属性在 Automation 对象中并不存在。
参看对象的文档以获得此对象更多的信息,并检查属性和方法的拼写应正确。

2.指定 Friend 过程做为被调用的后期绑定。
在编译时间必须知道 Friend 过程的名称,它不能出现在后期绑定的调用上。

========================
参考资料MSDN
关于对象和接口的简要补充讨论

本主题,将完成从“创建和实现接口”开始,并在“实现属性”中继续讨论的那个代码示例。当然,在开始这个主题之前,阅读一下那些主题是有帮助的。

这个 Tyrannosaur 和 Flea 代码示例,看起来似乎用接口和对象来解决很快,也很轻松。把对象的引用赋给一个对象变量,把接口的引用赋给另一个对象变量。

事实上,所有的引用都是对象的引用。对一个接口的引用也是对实现接口的对象的引用。而且,一个对象可能有多个接口,但在底层它仍然是同一对象。

在 Visual Basic 中,每个类都有一个缺省的接口,该接口具有与类相同的名字。是的,几乎都是同样的。按照惯例,在类名前加一条下划线。该下划线指明了这个接口是隐藏在类型库里的。

这样,Tyrannosaur 类就有一个缺省名为 _Tyrannosaur 的接口。因为 Tyrannosaur 同时实现 Animal,所以该类还有第二个接口(其名为 Animal)。

不过,在它的所有底层,对象仍然是 Tyrannosaur。将一个命令按钮放置到“Form1”上,并添加下面的代码:

Private Sub Command1_Click()
Dim ty As Tyrannosaur
Dim anim As Animal

Set ty = New Tyrannosaur
Set anim = ty
MsgBox TypeName(anim)
End Sub

可能期望信息框显示 "Animal",但是,事实上显示的是 "Tyrannosaur"。

查询接口
当把 Tyrannosaur 对象赋给 Animal 类型的变量时,Visual Basic 将询问该 Tyrannosaur 对象它是否支持 Animal 接口。(为此所用的方法为 QueryInterface,或者简称 QI;有时可能遇到 QI 作为动词使用。)如果回答是否定的,将会产生错误。

如果回答是肯定的,该对象将被赋给变量。只有通过这个变量 Animal 接口的方法和属性才可被访问。

类属对象变量和接口
如果将对象引用赋给类属对象变量,(如下列代码所示),将会出现什么情况?

Private Sub Command1_Click()
Dim ty As Tyrannosaur
Dim anim As Animal
Dim obj As Object

Set ty = New Tyrannosaur
Set anim = ty
Set obj = anim
MsgBox TypeName(obj)
End Sub

结果得到另一个 Tyrannosaur。现在,通过变量 obj 调用属性和方法时,得到什么接口?将下面的方法添加到 Tyrannosaur 类中:

Public Sub Growl()
Debug.Print "Rrrrrr"
End Sub

Growl 方法属于 Tyrannosaur 对象的缺省接口。在命令按钮的 Click 事件的代码中,用下面的两行代码来取代 MsgBox 语句:

obj.Move 42
obj.Growl

当运行这个工程并单击按钮时,执行将在 Growl 方法上停止,并返回错误信息“对象不支持此属性或方法”。很明显,接口仍然是 Animal。

Object 类型的变量和具有多重接口的对象一起使用时,必须记住某些事情。该变量将访问的接口是最后赋值的接口。例如:

Private Sub Command1_Click()
Dim ty As Tyrannosaur
Dim anim As Animal
Dim obj As Object

Set ty = New Tyrannosaur
Set anim = ty
Set obj = anim
obj.Move 42 '成功
obj.Growl '失败

Set obj = ty
obj.Move 42 '失败
obj.Growl '成功
End Sub

幸好,很少将这种比较慢的、后期绑定的 Object 数据类型和具有多重接口的对象一起使用。使用多重接口的一个主要原因是,通过多态可以得到前期绑定的好处。

其它接口源
Visual Basic 的类模块不是唯一的实现接口的源。可以实现类型库包含的各种接口,只要该接口支持 Automation。

如果有 Visual Basic 专业版或企业版,那么可以创建自己的抽象类的类型库。这些类型库可能在许多工程中用到,就象在《部件工具指南》中,“创建 ActiveX 部件”中的“部件设计的一般准则”中所描述的那样。

专业版和企业版在 Tools 目录都包括有 MkTypLib (Make Type Library) 实用工具。如果已经用 Microsoft Visual C++ 使用过该实用工具,就会发现这是创建接口的一条更适宜的途径。

在工程中使用接口
为了在工程中使用接口,可以在“工程”菜单上单击“引用”,打开“引用”对话框。如果类型库已经注册,那么它将出现在引用列表中,于是可以复选它。如果类型库不在该列表中,可以使用“浏览”按钮对它定位。

一旦有了对某个类型库的引用,就可以使用 Implements 来实现该类型库包含的任何 Automation 接口。

详细信息 并没有限制一定要实现为抽象接口。下面的“代码重用的许多(内部)方面”中描述了怎样实现一个接口,以及选择性地重用该接口提供的类的属性和方法。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 房产官司律师费多少 交通银行股份有限公司青岛高新技术产业开发区支行怎么样? 交通银行股份有限公司乌鲁木齐开发区支行怎么样? 交通银行股份有限公司武汉经济技术开发区支行怎么样? 一个花心的中年男人他的抖音里的粉丝原先190个粉丝,问啥三天不到掉了... ...她说你想是就是不是就不是,我不爱解释但我不解释也不 高产荠菜需要掌握的种植技巧有哪些 荠菜养殖需要什么条件 蕨菜怎么种才能高产 干嘛不快乐作文600字 ...这种碳原子称“手性碳原子”,凡有一个手性碳原子的物质一 为什么手性碳原子要连有四个不同基团的碳原子, 为什么手性碳原子要连接4个不同的原子或基团,2个相同不行吗 手性碳原子为什么一定要连四个不同的原子 不能有两个相同的吗 手性碳原子的分子一定是链接4个基团,一定是4吗? ...在冰天雪地的人间,遗失身份。纪念张国荣先生。——韩寒 干粉火火器主要用于扑救哪类火灾() 1x9 155M光模块最远能传到120KM吗? 植绒和聚酯纤维一样吗 从昆明至广州飞机票价是多少 昆明到广州的飞机票价是多少 ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... ...时错误 (0x800A01B6)对象不支持此属性或方法: 'Server.CreateObjectc... 一次函数-求X的范围 哈登打破了火箭队谁的记录 哈登和库里目前谁创造的NBA纪录更多? 昆明官渡古镇有什么好玩的景点? ...一和三)全部的插曲、片头片尾曲的作词人、编曲者?及详细信息_百度知 ... 性格与命运 鼻头有肉的男人 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 一年能改几次 修改一次,一年之内可以改第二次吗? 改了一次后就不能再修改了吗? 一年内怎么修改第二次 户口本性质相关规定 一年可以修改两次吗? 户口不注销的法律规定 移动吉祥号重启怎么弄 轿车后备箱锁保修期是几年 一天加班加半小时,那一个月加了多少班?请详解的过程。 ...但是意思中可以是表示人的那种英语单词,一个就好,谢谢大家帮忙... 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信...