假设ActiveX dll类中有方法as_sql()为数组。 Public Function a(ByRef s_sql() As String) as String
  a = UBound(s_sql)
End Function我这样写好像不对
调用说类型不匹配,这里需要怎么写

解决方案 »

  1.   

    UBound() 傳回 Long值,表示指定陣列某維最大可使用的陣列索引。問題是你是要返回數組的上限?還是返回數組?還是返回數組上限所對應的字串?上限:
    Public Function a(ByRef s_sql() As String) as String
      a = UBound(s_sql)
    End Function
    數組:
    Public Function a(ByRef s_sql() As String) as Variant
      a = s_sql
    End Function
    字串:
    Public Function a(ByRef s_sql() As String) as String
      a = s_sql(Ubound(s_sql))
    End Function
      

  2.   

    我是要问ByRef s_sql() As String这样写不对。要怎么写。传数组
      

  3.   

    ByRef s_sql() As String應該沒問題呀.
    或者用byval s_sql as variant
      

  4.   

    学习ing关注ing正确ing建议定义新的数据类型来进行传递,这样区分方便一点。
      

  5.   

    但是传到dll里面怎么是说参数不匹配啊
      

  6.   

    我先引用这个ActiveX dll
    然后
    Dim b As New wfwsClient.Class1
    Dim c(2) as Stringc(0)=0
    c(1)=1
    c(2)=2
    d=b.a(c)但是这里说参数类型不匹配,所以我就不知道那错了啊
      

  7.   

    可能对你有用:Private Sub Command1_Click()
        Dim myarray(1) As Integer
        myarray(0) = 7
        myarray(1) = 45
       MsgBox sum(myarray)
    End SubPublic Function sum(ByRef array2() As Integer) '这一定要用ByRef 
        sum = array2(1) + array2(0)
    End Function
      

  8.   

    楼主这个问题解决了没有,我也遇到相同的问题?难道说ActiveX DLL中不能传数组?好郁闷哟??
      

  9.   

    Public Function a(ByRef s_sql As Variant) As Long
      a = UBound(s_sql)
    End Function如果使用引用传递,将参数的类型设为Variant。这样做可以避免一些错误。不过尽可能的减少引用传递参数
      

  10.   

    数组不能直接作为参数来使用,只能定义为Variant
    相同的例子还有使用Split函数来分割字符串到数组,也是同样的道理。
      

  11.   

    数组可以传递,用数组名来传递,ByRef s_sql 就可以了
      

  12.   

    不懂耶在一标准EXE里
    Private Sub Form_Load()
    Dim a As New Class1
    Dim e(0 To 23) As String
    MsgBox a.a(e)
    End Sub
    在一动态库里
    Public Function a(ByRef s_sql() As String) As Long
      a = UBound(s_sql)
    End Function为什么我可以啊?
      

  13.   

    ByRef s_sql As Variant 试试看
      

  14.   

    最好是属性!Public Function a(ByVal s_sql() as string) as string
      Redim a(UBound(s_sql))
      a = s_sql
    End FunctionOK了,不过存在隐患,就是当s_sql()为空时,UBound(s_sql)报告错误
      

  15.   

    狂赞同  ByRef s_sql As Variant
      

  16.   

    在一动态库里
    Public Function a(ByRef s_sql() As String) As Variant
      Dim b As Variant
      b = s_sql
      
      For i = LBound(s_sql) To UBound(s_sql)
        MsgBox b(i)
      Next
    End Function
    在标准EXE文件中
    Private Sub Form_Load()
    Dim a1 As New Class1
    Dim e(0 To 22) As String
    For I = 0 To 22
    e(I) = "LKGFD" & I
    Next
    Dim aaa
    aaa = a1.a(e)'调用
    End Sub
      

  17.   

    不好意思,搞错了点,改为Public Function a(ByVal s_sql() as string) as variant
      Redim a(UBound(s_sql))
      a = s_sql
    End Function