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

问题描述:

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

类BigInt有...

Option Explicit 
Public Sub dothing(ByRef passed_object As MyInt) 
End Sub 

和实施BigImplementation ...

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的调用完美。有谁知道我做错了什么,我需要做什么来解决这个问题?

+1

您的任何参数都不需要是“ByRef”,我个人发现它们具有误导性,例如,我的调用代码将不得不测试通过`ByRef`的引用在调用之后是否指向另一个对象。但如果它是'ByVal',我将能够信任被调用者。 – onedaywhen 2011-02-11 15:57:02

+0

@onedaywhen,好点;谢谢你。 – 2011-02-11 16:06:12

使用

mybigobj.dothing myobj 

Call mybigobj.dothing(myobj) 

把围绕基准额外的括号评估其默认属性,并传递它的值作为实际参数。

mybigobj.dothing需要它的参数是一个敏

Public Sub BigInt_dothing(ByRef passed_obj As MyInt) 
Dim i As Integer 
i = passed_obj.getprop 
End Sub 

你传递一个MyImplementation

Set myobj = New MyImplementation 

所以possiblly像(我的VB是生锈)

mybigobj.dothing (myobj.myint_getprop()) 
+0

谢谢你的回答。我尝试将`dothing`中的参数更改为`ByRef passed_object as MyImplementation`,但同样的事情发生了。我想将整个对象而不是它的属性作为参数传递,如果可能的话,因为对象myobj提供了几个事实并且这些值也可能会不时变化。 – 2011-02-11 13:36:58