该接口在vc中调用
         char *buffer = NULL;
long len = 0;

         lRet = test(handle,buffer,&len);
if (lRet<0)
{
buffer = new char[len];
lRet = test(handle,buffer,&len);
buffer[len] = 0x00;

}
我试了在vb中调用
Private Declare Function test Lib "test.dll" (ByVal Handle As Long, ByVal buffer As string, ByRef len As Long) As LongDim buffer As string
Dim len As LonglRet = test(Handle, buffer,len)
If (lRet < 0) Then
    buffer= String(len, Chr(0))
    lRet = test(Handle, buffer,len)
End If在vb中得到的结果不正确,test函数需要调用两遍,第一遍得到需要的缓冲区长度,第二遍得到结果,就是 buffer 应该是个二进制的请大家帮忙看看

解决方案 »

  1.   

    用动态数组
    Dim buffer() as Byte(VB的Stirng是Unicode的,为了与ANSI的API兼容,在调用API的时候会进行字符集转化,这样就造成了数据错误)
      

  2.   

    但是要重新分配大小,如何分配。而且函数定义时数组要求是byref的和程序接口不符,出现错误
      

  3.   

    Dim buffer As string
    Dim len As LonglRet = test(Handle, vbnullstring,len)
    If (lRet < 0) Then
        buffer= String(len, vbnullchar)
        lRet = test(Handle, buffer,len)
    End If