:函数间传递ParamArray参数数组的有关问题

高手请进:函数间传递ParamArray参数数组的问题
我写的一个小程序中需要在函数间传递用ParamArray指定的参数数组,而且被调用的函数也使用ParamArray来指定参数,但现在被两个问题难住了,希望各位高手能够指点迷津。

示例代码在下面。

VB code

Private Function MyFunc(ParamArray a())

    If a()为空 Then  '<--这里应该怎么写?
        MyFunc = SubFunc1()
    Else '不为空
    
        If a()包含结构体 Then  '<--这里应该怎么写?
            MyFunc = SubFunc2(a)  '<--怎么写才能将包含结构体的数组正确传递到被调用的函数?
        Else
            MyFunc = SubFunc3(a)
        End If

    End If

End Function

Private Function SubFunc1()

    '代码略
End Function

Private Function SubFunc2(ParamArray SomeParam())

    '代码略
End Function

Private Function SubFunc3(ParamArray SomeParam())

    '代码略
End Function




1. 参数数组为空,也就是不指定参数的情况下:
  (1) 如果能够在数组为空的时候将空数组传递给被调用的函数,是最理想的(直接传递参数到SubFunc2)。但如果不能,则——
  (2) 我想用判断数组是否为空的方法来分别调用SubFunc1和SubFunc2。此时,如何判断数组是否为空?

2. 参数中可能包含结构体,如何能够将包含结构体的参数数组准确传递给被调用的函数?


第一次提问,分不是很多,希望大家多多帮助,谢谢!

------解决方案--------------------
判断的方法:
1.可以判断参数的个数
2.判断参数名称所在位置的类型

判断出来以后,分别执行对应的函数

不过我的意见在做实际做的时候,不用这么写,要我的话:

1. Call MyFunc()
2. Call MyFunc(i, l, s)
3. Call MyFunc(l, s, varTest,i)
改为:
SubFunc1
SubFunc2 i,l,s
SubFunc3 l, s, varTest,i
------解决方案--------------------
我来说一说呵呵呵。
1、ParamArray中,不支持结构型参数传递。
2、ParamArray参数,是一定会被初始化的。如果外部没有传参数,那么Ubound为-1.一般用Ubound +1可以获得外界传递的参数个数。
3、Paramarray参数,不能作为参数传递给另一个函数。
有关如何传递ParamArray,可以参考VBCorlib代码中有关Helper.Swap的用法。很有借鉴意义。

------解决方案--------------------
结构,不支持后期绑定的。所以不能给ParamArray赋值。ParamArray的实质就是Variant型数组。并且VB运行时在传出前做了锁定。
------解决方案--------------------
同一个方法执行不同的代码嘛,多态

VB code

'------------------------------------Form1代码-------------------------
'全都调用Execute方法来执行不同的操作
Public Sub Execute(obj As IExecute)
    obj.Execute
End Sub

'也可以这样写,就可以不用iExecute.cls了,也不用Implements 它了
'Public Sub Execute(obj As object)
'    obj.IExecute_Execute
'End Sub

Private Sub 执行方法1_Click()
    Execute New cExecuteA
End Sub

Private Sub 执行方法2_Click()
    Dim x As New cExecuteB
    x.ParamA = 10
    Execute x
End Sub

Private Sub 执行方法3_Click()
    Dim x As New cExecuteC
    x.x = 100
    x.y = 100
    Execute x
End Sub

'-----------------------------Moudle.bas代码 定义一个结构----------------
Public Type Point
    x As Long
    y As Long
End Type

'--------------------------------------cExecuteA.cls代码-------------------------
Implements IExecute
'这个类执行不需要参数
Public Sub IExecute_execute()
    MsgBox "这个类执行不需要参数"
End Sub

'cExecuteB代码
Implements IExecute
Public ParamA As Long

'这个类执行需要一个参数
Public Sub IExecute_execute()
    MsgBox "这个类执行需要一个参数" & ParamA
End Sub


'----------------------------cExecuteC.cls代码------------------------
Implements IExecute
Private typeA As Point
 
Public Property Let x(value As Long)
    typeA.x = value
End Property
Public Property Let y(value As Long)
    typeA.y = value
End Property

'这个类执行需要一个结构
Public Sub IExecute_execute()
    MsgBox "这个类执行需要一个结构" & "x=" & typeA.x & ",y=" & typeA.y
End Sub


'----------------------------------------IExecute.cls代码-------------------------
Public Sub Execute()

End Sub