【问题标题】:How to pass objects to methods in other classes in VB6VB6中如何将对象传递给其他类中的方法
【发布时间】:2011-02-11 13:23:07
【问题描述】:

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

类 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

然后我使用以下 sn-p 代码来驱动它:-

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

【问题讨论】:

  • 您的参数都不需要是ByRef,我个人会发现它们具有误导性,例如我的调用代码必须在调用后测试我通过ByRef 的引用是否指向不同的对象。但如果是ByVal,我将能够信任被调用者。
  • @onedaywhen,好点;谢谢你。

标签: class vb6


【解决方案1】:

使用任一

mybigobj.dothing myobj

Call mybigobj.dothing(myobj)

在引用周围放置额外的括号会评估其默认属性并将其值作为实际参数传递。

【讨论】:

  • 谢谢。我的第一次尝试表明这就是问题所在。下周我会更彻底地检查一下。
  • 投了赞成票,但想说我真的很讨厌在人们的代码中绊倒第二种语法。只需学习规则,如果您注意,IDE 甚至会在您错误调用时提示您:它会在左括号之前插入一个空格以显示您所做的事情。
  • @Bob:我们发现第二种语法很有用——我们在调用 API 函数时使用它,即 Call Sleep(1000),所以要记住 Err.LastDllError 已设置 :-))
  • 尝试了更多,一切都很棒。谢谢你,wqw。
【解决方案2】:

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())

【讨论】:

  • 感谢您的回答。我尝试将dothing 中的参数更改为ByRef passed_object as MyImplementation,但同样的事情发生了。如果可能的话,我想传入整个对象而不是其属性作为参数,因为对象 myobj 提供了几个事实,这些值也可能不时改变。
  • 你应该添加一个类似上面的方法,但要使用 MyImplmentation
  • 感谢您的尝试,但是吃MyImplementation 的方法会产生相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多