2016-02-04 32 views
0

我都試過了,但一切都讓我類型不匹配:是沒有類型不匹配VB6

Type UserType 
... 
End Type 

Dim SomeArray() As UserType 
... 
If SomeArray() Is Nothing Then <do smth> 
If SomeArray() Is Empty Then <do smth> 
If SomeArray Is Nothing Then <do smth> 
If SomeArray Is Empty Then <do smth> 

我很想知道,當我在用戶定義類型的數組沒有元素!因爲如果我可以使用VB6的可能性,我不想使用額外的變量。

我會用

Erase SomeArray 

當它的大小= 1(UBound(SomeArray) = 1),我想刪除最後一個元素。

我做錯了什麼? XD

回答

2

VB6「Is Nothing」適用於對象,而不是VB6 arrays

「Ubound(myarray)」或「Ubound - LBound」是確定VB6中數組當前長度的方法。

僅供參考,使用VB6 Collection可能對您更好。

+0

收集不適用於用戶類型。它寫了類似於「你被強迫的混蛋吸我的造!鏈接自己在公共預編譯模塊,遲到的敗類!」。我唯一懂的 - 「敗類」。這是非常進攻的。 不止這些!我甚至無法將簡單的String添加到Collection中! O_O – upitanniy

0

嘿,我發現一個屁股方式來解決VBForums「VB6 - 返回/檢測空陣列」這個問題。 B)

(L/UBound函數不空數組的工作 - 它返回超出範圍的下標。))

所以......

Private Declare Function ArrPtr Lib "msvbvm60" Alias "VarPtr" (Ptr() As Any) As Long 
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long) 

Public Function Peek(ByVal lPtr As Long) As Long 
    Call CopyMemory(Peek, ByVal lPtr, 4) 
End Function 

記住聲明自己的變量之前定義這個子程序!或者它會導致一些奇怪的錯誤(VB突然用退出函數替換了我的Exit Sub語句!)。

然後我用

If Peek(ArrPtr(SomeArray)) = 0 Then 
     MsgBox "Looks like empty array SomeArray() before ReDim ^_^" 
    End If 

Erase SomeArray 

    If Peek(ArrPtr(SomeArray)) = 0 Then 
     MsgBox "Looks like empty array SomeArray() after Erase ^_^" 
    End If 

,一切工作正常!

不是很簡單,但很好。

Thx everyone,我將學習這個名爲Collection的鏈表。

特別感謝VBForums,他們真的是怪人。