我在VC++中生成DLL,在VB6.0中调用VC生成的DLL,返回值是一个结构体,而且结构体中存在指针。
typedef struct DataArray
{
unsigned char* ab;
unsigned char valType;
unsigned int valLength;
}DATAARRAY;
extern "C" DATAARRAY __declspec(dllexport) yyy()
{
DATAARRAY test;
test.valLength=5;
test.ab = (unsigned char *)malloc(test.valLength);
test.ab[0]=11;
test.ab[1]=12;
test.ab[2]=13;
test.ab[3]=14;
test.ab[4]=15;
test.valType=2;
return test;
}
以上生成DLL
VB程序如下,请同仁帮我看看应该怎么修改!!!
Public Type VARVALUE
value As Variant
valType As Byte
valLength As Integer
End Type
Private Declare Function yyy Lib "dll.dll" () As VARVALUE
[最优解释]
Type DATAARRAY
ab() As Byte
valType As Byte
valLength As Integer
End Type
Private Declare Function yyy Lib "dll.dll" () As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( & _
Destination As Any, _
Source As Any, _
ByVal Length As Long)
Sub Main()
Dim RetArray() As Byte
Dim RetLong As Long
Dim MemorySize As Long
Dim RetData As DATAARRAY
Redim RetArray(6)
RetLong = yyy() '返回DATAARRAY结构的指针
CopyMemory RetArray(0),RetLong,7 '取得DATAARRAY结构数据
CopyMemory RetLong,RetArray(0),4 '取得ab指针
MemorySize = GlobalSize(RetLong) '取得ab指针的内存分配大小(必须由GlobalAlloc分配的内存才有效)
Redim RetData.ab(MemorySize-1) '分配ab指针的大小
CopyMemory RetData.ab(0),RetLong,MemorySize '取得ab指针的内容到VB结构体里
CopyMemory RetData.valType,RetArray(4),1 '取得DATAARRAY结构的valType数据
CopyMemory RetData.valLength,RetArray(5),2 '取得DATAARRAY结构的valLength数据
'完成RetData数据的处理
End Sub
dim xx as 结构
i = api调用
copymemory xx,byval i&,len(xx)
xx 结构的内容就被填充了
如果能直接返回结构
dim xx as 结构
xx = api调用就行了
[其他解释]