声明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字符串类型
对于String型变量的引用方法改为Byval:
Byval InputChar As String,Byval OutputChar As String,VB中String型变量用的是字符串描述,不是地址,
用Byval传递向DLL函数String型变量,则强制将String型变量转换为一个标准的C字符串类型
可以这样:
strBuffer=space(256)
lngBufferSize=Len(strBuffer)
然后才调用DLL函数
如果不初始化,OutputChar="",是一个空字符串,
Byval关键字强制转换后的C字符串的第一个字符就是NULL,
之后的内存地址就没有纳入缓冲区,自然就不能进行读写操作了
int cs_uncompress(CString input_array, int input_array_len, CString output_array, int buf_size )
编译后,再在VB里调用试试看!
Byval InputChar As Any 即可(VC里用 unsigned char *input_array)。
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))