从函数返回空UDT

时间:2011-09-08 06:44:47

标签: vb6

我编写了一个返回用户定义类型的函数。

如果函数出现任何错误,我如何返回空UDT?

我尝试将函数设置为'Nothing',但它正在抛出'Object Required'错误。

提前致谢。

3 个答案:

答案 0 :(得分:4)

如果可能,请改用Class / Object。甚至做一些像转这种类型一样简单的事情:

Public Type EmpRecord
   FName As String
   LName As String
   HiredDate As Date
End Type

进入一个类可以通过在你的项目中添加一个名为EmpRecord的类来完成,其中包括:

Public FName As String
Public LName As String
Public HiredDate As Date

然后,您可以从检索记录时出错的函数返回Nothing。

答案 1 :(得分:2)

UDT不能为空。 您可以使用“虚拟”未初始化的UDT,也可以只将其所有成员设置回默认值。

答案 2 :(得分:2)

在VB6中,用户定义的类型是“值类型”,而类是“引用类型”。值类型通常存储在堆栈中(除非它们是类的成员)。引用类型存储为堆栈上的指针,指向堆中存储实际实例数据的位置。

这意味着对类的引用可以是Nothing(指针为零),而值类型则不能。

有多种方法可以解决您的问题:

  1. Boolean成员添加到用户定义的类型中以表示成功或失败。
  2. 创建另一个“包装器”UDT(如下所示)并从函数中返回。
  3. 将您的UDT更改为一个类,可以是Nothingtcarvin said)。
  4. 编写函数以返回Boolean并获取ByRef参数。如果函数结果为True,则结果将写入传入的参数。 (很多人不喜欢这个,但这是你应该注意的常见解决方案。)
  5. 打包机:

    Public Type Wrapper  
        Success As Boolean  
        Inner As YourOriginalUDT  
    End Type  
    

    ByRef的功能:

    Function Foo(ByRef Result As YourOriginalUDT) As Boolean
        ...
        If Success Then
            Foo = True
            Result.A = A
            Result.B = B
            Result.C = C
            ... etc. ...
        End If
    End Function