分享:VB6如何判断数组是否初始化
vb吧
全部回复
仅看楼主
吧务
level 12
sunruisunrui
楼主
2020年03月04日 14点03分
1
level 15
初音✨七奈
这个写法以前见过,感觉挺bug的
理论上来说,VB是不支持指针直接运算的,需要用隐藏函数(如VarPtr)才能取指针并进行运算;但是这里却可以对数组名这个指针进行Not运算……未初始化的指针值为0,取反之后就是-1
2020年03月05日 02点03分
2
sunruisunrui
我是从国外的论坛借鉴过来的。
2020年03月05日 03点03分
隨風🍁缒夢
@sunruisunrui
这个方法的确比SafeArrayGetDim和varptr后Copymemory要高效
2020年03月05日 10点03分
level 13
A1Duke
Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
如果数组已经初始化,则返回非0,否则返回0。
2020年03月05日 06点03分
3
yjryym
不行的,SafeArrayGetDim 的返回值是UINT16,不是Long,会导致数组地址的高位截断,如果非空数组的地址刚好的低16位为0,你就出BUG了。
2025年04月23日 03点04分
level 13
隨風🍁缒夢
刚刚测试了下,用not数组名来判断数组为空,遇到bug了。只要not 数组名后,对single类型变量赋值,再debug.print 输出就会出现表达式太复杂了,但是编译就没问题了
2020年03月06日 14点03分
4
sunruisunrui
有意思
2020年03月07日 02点03分
klimaa
不只是single。但是我开始是没有问题的。是不是数组没初始化的时候,没有数据类型,取反后给了错误的指针。
2025年04月23日 07点04分
1