声明cs_compress(ByRef InputChar As String, ByVal InputLen As Integer,ByRef OutputChar As String, ByVal Buf_Size As Integer) As Integer 
对于String型变量的引用方法改为Byval:
Byval InputChar As String,Byval OutputChar As String,VB中String型变量用的是字符串描述,不是地址,
用Byval传递向DLL函数String型变量,则强制将String型变量转换为一个标准的C字符串类型

解决方案 »

  1.   

    我试过ByVal传递参数,可是报的是同样的错!
      

  2.   

    你用ByVal传递String参数之前,对String型变量进行初始化了吗?
    可以这样:
    strBuffer=space(256)
    lngBufferSize=Len(strBuffer)
    然后才调用DLL函数
      

  3.   

    我做过初始化的,我这个程序的目的是将一个报文在发送前进行压缩。InputChar 是输入串,已付值,OutputChar是输出串,是否应该初始化?
      

  4.   

    To:Flying_Fly(Just_Fly) 输出串OutputChar也要初始化,提供一个原始的大小即缓冲区
    如果不初始化,OutputChar="",是一个空字符串,
    Byval关键字强制转换后的C字符串的第一个字符就是NULL,
    之后的内存地址就没有纳入缓冲区,自然就不能进行读写操作了
      

  5.   

    楼上的观点有道理,但是你可以试着把dll中函数的声明改为:
    int cs_uncompress(CString input_array, int input_array_len, CString output_array, int buf_size ) 
    编译后,再在VB里调用试试看!
      

  6.   

    将 ByRef InputChar As String 改为
       Byval InputChar As Any 即可(VC里用 unsigned char *input_array)。
      

  7.   


    int cs_uncompress(unsigned char *input_array, int input_array_len, unsigned char *output_array, int buf_size ) VB:
    ... declare ... (input_array as any, byval input_array_len as long, output_array as any, byval buf_size as long ) as long使用Byte Array:
    dim bt(xx) as byte
    dim bt1(xx) as byte
    cs_uncompress(bt(0),ubound(bt)+1,bt1(0),ubound(bt1)+1)
    使用String:
    dim s as string
    dim s2 as string
    s=...
    s2 = string(xxx,0)cs_uncompress(byval strptr(s),len(s),byval strptr(s1),len(s1))