我用VB做了一个DLL文件,其中有一个函数的一个参数是数组,
我如此声明:
byref sz() as string
当向此DLL传递一个string型的数组时,传递过去的数组读取出来却是问号...
不知道如何向DLL传递字符串型数组???希望能给出个简单的例子...

解决方案 »

  1.   

    不会吧.....?你在DLL过程内如何写这个数组的?
      

  2.   

    我写出来吧:DLL代码:Public Function guolv(ByRef sz() As String) As Long
    For i = 1 To UBound(sz)
      If Len(sz(i)) > 0 Then
       MsgBox sz(i)
      End If
    NextEnd FunctionPublic Function DLLMain(ByVal hInstDLL As Long, ByVal fdwReason As Long, ByVal lpwReserved As Long) As Long
    DLLMain = 1 '这是一个DLL的基本过程,在装载和卸载DLL时都会调用
    End FunctionPublic Sub Main()
    '这是VB的主过程,这里的目的是使VB可以顺利进行编译
    'End Sub 这个结束在键入时VB会自动插入End Sub
    调用DLL的程序代码:Private Declare Function guolv Lib "guolv.dll" (ByRef sz() As String) As LongPublic sz() As StringPrivate Sub Command1_Click()
    Dim j As IntegerFor j = 1 To 10
      sz(j) = ""
    NextFor i = 1 To List1.ListCount
      sz(i) = List1.List(i - 1)
    Next
    guolv sz()
    End Sub
      

  3.   

    ?
    楼主不定义sz()的具体长度,在
    For j = 1 To 10
      sz(j) = ""
    Next
    能运行的通吗?
    你不妨用redim preserve 试试
      

  4.   

    对不起,那个代码我发错了,应该是:Private Declare Function guolv Lib "guolv.dll" (ByRef sz() As String) As LongDim sz(10) As StringPrivate Sub Command1_Click()
    Dim j As IntegerFor j = 1 To 10
      sz(j) = ""
    NextFor i = 1 To List1.ListCount
      sz(i) = List1.List(i - 1)
    Next
    guolv sz()
    End Sub
      

  5.   

    这样子的代码,如果DLL的代码是放在与调用程序一起的话,没有问题.
    问题出在,DLL的那代码是作为DLL时,调用程序调用起DLL来就发现有问题.
      

  6.   

    原来是使用偏方做的"准标准DLL"啊.......个人意见:放弃.这种DLL不容易做稳定,应用到工程里,你敢?前年我对此法做的几个试验,感觉没有必要在上面花过多精力我看LZ还是用其它支持标准DLL的开发工具吧,比如易语言,2.53版免费,也可以生成DLL,功能应该够你用的了
      

  7.   

    很不幸,VB 看到 Declare 函数中的 String 类型参数,都是当做 DBCS 编码处理的(为了良好兼容)!
    在 guolv 中用 MsgBox strconv(sz(i),vbunicode) 试试成不成?