Class 如何在VB6中将对象传递给其他类中的方法

Class 如何在VB6中将对象传递给其他类中的方法,class,vb6,Class,Vb6,我创建了两个类作为接口/实现类,并希望将一个类的特定示例传递给另一个类中的方法。定义如下 类BigInt Option Explicit Public Sub dothing(ByRef passed_object As MyInt) End Sub 和一个大的实现 Option Explicit Implements BigInt Public Sub BigInt_dothing(ByRef passed_obj As MyInt) Dim i As Integer i = passed

我创建了两个类作为接口/实现类,并希望将一个类的特定示例传递给另一个类中的方法。定义如下

类BigInt

Option Explicit
Public Sub dothing(ByRef passed_object As MyInt)
End Sub
和一个大的实现

Option Explicit
Implements BigInt

Public Sub BigInt_dothing(ByRef passed_obj As MyInt)
Dim i As Integer
i = passed_obj.getprop
End Sub
我计划通过的课程是

Option Explicit

Public Property Get getprop() As Integer
End Property

Public Property Let letprop(ByVal myval As Integer)
End Property
作为MyImplementation实现,因此

Option Explicit
Implements MyInt
Private myval As Integer

Public Property Get myint_getprop() As Integer
myint_getprop = myval
End Property

Public Property Let myint_letprop(ByVal passed_int As Integer)
myval = passed_int
End Property
然后,我将使用以下代码片段来驱动此过程:-

Private Sub Command_Click()
Dim myobj As MyInt
Set myobj = New MyImplementation
Dim mybigobj As BigInt
Set mybigobj = New BigImplementation

myobj.letprop = 1
Call mysub(myobj)
mybigobj.dothing (myobj)   ' Line with problem
End Sub

Private Sub mysub(ByVal passed_obj As MyInt)
Dim i As Integer
i = passed_obj.getprop
End Sub

当执行到达标记行时,我得到运行时错误438-对象不支持属性或方法。对普通函数mysub的调用非常有效。有人知道我做错了什么,以及我需要做什么来解决这个问题吗?

mybigobj.dothing要求其参数为MyInt

Public Sub BigInt_dothing(ByRef passed_obj As MyInt)
Dim i As Integer
i = passed_obj.getprop
End Sub
您正在传递一个MyImplementation

Set myobj = New MyImplementation
所以我的vb可能生锈了

mybigobj.dothing (myobj.myint_getprop())

mybigobj.dothing要求其参数为MyInt

Public Sub BigInt_dothing(ByRef passed_obj As MyInt)
Dim i As Integer
i = passed_obj.getprop
End Sub
您正在传递一个MyImplementation

Set myobj = New MyImplementation
所以我的vb可能生锈了

mybigobj.dothing (myobj.myint_getprop())
使用其中一个

mybigobj.dothing myobj

在引用周围加上额外的圆括号将计算其默认属性,并将其值作为实际参数传递。

使用

mybigobj.dothing myobj



在引用的周围加上额外的括号将计算其默认属性,并将其值作为实际参数传递。

谢谢您的回答。我尝试将dothing中的参数更改为ByRef传递的_对象作为MyImplementation,但同样的事情发生了。如果可能的话,我想传入整个对象,而不是它的属性作为参数,因为对象myobj提供了几个事实,并且这些值也可能会不时更改。您应该添加一个类似于上面的方法,但使用myImplementation感谢您的尝试,但是使用MyImplementation的方法会产生相同的结果。谢谢您的回答。我尝试将dothing中的参数更改为ByRef传递的_对象作为MyImplementation,但同样的事情发生了。如果可能的话,我想传入整个对象,而不是它的属性作为参数,因为对象myobj提供了几个事实,并且这些值也可能会不时更改。您应该添加一个类似于上面的方法,但使用myImplementation感谢您的尝试,但是使用MyImplementation的方法会产生相同的结果。您的任何参数都不需要是ByRef,我个人会发现它们具有误导性,例如,我的调用代码必须测试我传递给ByRef的引用在调用后是否指向不同的对象。但如果是拜瓦尔的话,我就可以相信被叫人了;谢谢。您的任何参数都不需要是ByRef,我个人会发现它们具有误导性,例如,我的调用代码必须测试我传递给ByRef的引用在调用后是否指向其他对象。但如果是拜瓦尔的话,我就可以相信被叫人了;谢谢你,谢谢你。我的第一次尝试表明这就是问题所在。下周我会更彻底地检查一下。我对此投了赞成票,但我想说我真的不喜欢在人们的代码中第二种语法上绊倒。只要学习规则,如果你注意到了,IDE甚至会在你错配调用时提示你:它会在左配前面插入一个空格,向你展示你所做的事情。@Bob:我们发现第二种语法很有用-我们在调用API函数(即调用Sleep1000)时使用它,所以要记住Err.LastDllError被设置了:-请再试一次,一切都很好。谢谢你,wqw。谢谢你。我的第一次尝试表明这就是问题所在。下周我会更彻底地检查一下。我对此投了赞成票,但我想说我真的不喜欢在人们的代码中第二种语法上绊倒。只要学习规则,如果你注意到了,IDE甚至会在你错配调用时提示你:它会在左配前面插入一个空格,向你展示你所做的事情。@Bob:我们发现第二种语法很有用-我们在调用API函数(即调用Sleep1000)时使用它,所以要记住Err.LastDllError被设置了:-请再试一次,一切都很精彩。谢谢你,wqw。