该接口在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 应该是个二进制的请大家帮忙看看
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 应该是个二进制的请大家帮忙看看
Dim buffer() as Byte(VB的Stirng是Unicode的,为了与ANSI的API兼容,在调用API的时候会进行字符集转化,这样就造成了数据错误)
Dim len As LonglRet = test(Handle, vbnullstring,len)
If (lRet < 0) Then
buffer= String(len, vbnullchar)
lRet = test(Handle, buffer,len)
End If