2011-09-08 22 views
3

我寫了一個返回用戶定義類型的函數。返回空的UDT從函數

如何在函數發生任何錯誤的情況下返回一個空的UDT?

我試着設置函數爲'Nothing',但它拋出'Object Required'錯誤。

在此先感謝。

回答

2

在VB6中,用戶定義的類型是「值類型」,而類是「引用類型」。值類型通常存儲在堆棧中(除非它們是類的成員)。引用類型作爲指針存儲在堆棧中,指向存儲實際實例數據的堆中的某個位置。

這意味着對類的引用可以是Nothing(指針爲零),而值類型不能。

有多種方式來解決問題:

  1. 一個Boolean成員添加到您的用戶定義的類型,以指示成功或失敗。
  2. 創建另一個「包裝」UDT(如下所示)並將其從您的函數中返回。
  3. 將您的UDT更改爲一個類,該類可以是Nothing(如tcarvin said)。
  4. 編寫函數返回Boolean並採取ByRef參數。如果函數結果爲True,則結果寫入傳入的參數。 (很多人不喜歡這樣,但它是一個通用的解決方案,你應該知道的。)

包裝:

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 
2

UDT不能爲空。 您既可以使用「虛擬」非空間化的UDT,也可以將其所有成員都設置爲默認值。

4

如果可能,請改爲使用Class/Object。即使這樣做是把這一類簡單的東西:

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

然後您可以返回:

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

成一個類可以通過添加類到您的項目稱爲EmpRecord和包括剛纔這不能做到檢索記錄時發生錯誤的函數沒有任何內容。