如何判断数组是否初始化或为空

rkdrc 2010-07-06 02:00:57
网上查了可以用APi safearraygetdim函数,但我在APi浏览器中找不到此函数,什么原因?
...全文
803 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CHRL 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 bcrun 的回复:]
哪里不行,你执行了ReDim a(0)当然就已经初始化了啊
[/Quote]
你有没有在VB里面运行一下呀
bcrun 2010-07-10
  • 打赏
  • 举报
回复
哪里不行,你执行了ReDim a(0)当然就已经初始化了啊
bcrun 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chrl 的回复:]
VB code
Public Function IsArrayEmpty(va As Variant) As Boolean
Dim i As Long
On Error Resume Next
i = LBound(va, 1)
IsArrayEmpty = (Err <> 0)
Err = 0
End Function
[/Quote]

这个最好要先判断一下该Variant变量是数组类型的吧
CHRL 2010-07-09
  • 打赏
  • 举报
回复
LZ,我的這個為什麼不行呀

Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long

Private Sub Command1_Click()
Dim a() As Integer
ReDim a(0)
If SafeArrayGetDim(a) <= 0 Then
'If IsArrayEmpty(a) Then
MsgBox "沒有初始化"
Else
MsgBox "已經初始化"
End If

End Sub


Public Function IsArrayEmpty(va As Variant) As Boolean
Dim i As Long
On Error Resume Next
i = LBound(va, 1)
IsArrayEmpty = (Err <> 0)
Err = 0
End Function

CHRL 2010-07-08
  • 打赏
  • 举报
回复
Public Function IsArrayEmpty(va As Variant) As Boolean
Dim i As Long
On Error Resume Next
i = LBound(va, 1)
IsArrayEmpty = (Err <> 0)
Err = 0
End Function
bcrun 2010-07-08
  • 打赏
  • 举报
回复
是啊,这函数很有用的
ttsffgg 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 king06 的回复:]

Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
If SafeArrayGetDim(YourArray) <= 0 Then msgbox "It's null."
[/Quote]

原来还有这个函数啊~~~
chinaboyzyq 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 rkdrc 的回复:]

引用 2 楼 king06 的回复:
Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
If SafeArrayGetDim(YourArray) <= 0 Then msgbox "It's null."

找不到这个API SafeArrayGetD……
[/Quote]
复制以下代码去用就是了。

Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long

Private Sub Command1_Click()
Dim a() As Integer
'ReDim a(0)
If SafeArrayGetDim(a) <= 0 Then
MsgBox "没有初始化"
Else
MsgBox "已经初始化"
End If

End Sub

ttsffgg 2010-07-06
  • 打赏
  • 举报
回复
Private Declare Function VarPtrArray _
Lib "msvbvm60.dll" _
Alias "VarPtr" (Var() As Any) As Long

Private Declare Sub CopyMemory _
Lib "kernel32" _
Alias "RtlMoveMemory" (lpDst As Any, _
lpSrc As Any, _
ByVal ByteLength As Long)

Private Sub Form_Load()

Dim a(0) As Long '被检测的数组

Dim PSafeArray As Long

'取得的数组内容的地址,
'如果该数字指向一个正确的地址,那么该数组是已经被正确初始化的
'如果其指向0,那么说明数组没有被初始化过

CopyMemory PSafeArray, ByVal VarPtrArray(a()), 4 '从数组的SafeArray结构头中得到实际数据的地址

If PSafeArray = 0 Then
MsgBox "数组没有被初始化过"
Else
MsgBox "数组已经被初始化,其数据地址为" & PSafeArray
End If

End Sub
rkdrc 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 king06 的回复:]
Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
If SafeArrayGetDim(YourArray) <= 0 Then msgbox "It's null."
[/Quote]
找不到这个API SafeArrayGetDim
rkdrc 2010-07-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luofenghen 的回复:]
用redim 初始化
不初始化会出错
为什么要判断?
[/Quote]
就是因为要出错所以要判断是否为孔,比如ubound(arr),假如arr未初始化,就出错,我要把这个判断出来处理这个错误
king06 2010-07-06
  • 打赏
  • 举报
回复
Public Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
If SafeArrayGetDim(YourArray) <= 0 Then msgbox "It's null."
luofenghen 2010-07-06
  • 打赏
  • 举报
回复
用redim 初始化
不初始化会出错
为什么要判断?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧