是什么类型不匹配VB6

时间:2016-02-04 18:56:33

标签: vb6 basic nothing

我尝试了一切,但一切都给了我类型不匹配的信息:

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 个答案:

答案 0 :(得分:2)

VB6“Is Nothing”适用于对象,而不是VB6 arrays

“Ubound(myarray)”或“Ubound - LBound”是确定VB6中数组当前长度的方法。

仅供参考,使用VB6 Collection对您来说可能会更好。

答案 1 :(得分: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函数替换了我的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

一切正常!

不是很简单,但很好。

大家,我将学习这个名为Collection的链式列表。

特别感谢VBForums,他们真的是极客。