要使用safearray。
ocx中包装数据:
struct vv {
int m;
int n;
};
VARIANT varArray;
long i;
vv kk[10];
for(i=0;i<10;i++){
kk[i].m=i;
kk[i].n=i*i;
}
int len=sizeof(vv);
SAFEARRAYBOUND bound;
bound.cElements=10;
bound.lLbound=0;
SAFEARRAY* psa=SafeArrayCreate(VT_VARIANT,1,&bound);
psa->fFeatures =FADF_AUTO|FADF_FIXEDSIZE;
psa->cbElements =sizeof(vv);
psa->pvData =&kk;
varArray.vt = VT_ARRAY|VT_UI1;
varArray.parray = psa;
testevent(&varArray);
其中testevent是事件,参数类型是variant*。
vb中:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Type tt
m As Long
n As Long
End Type
Private Sub testocx11_mm(buff1 As Variant)
Dim r() As Byte
r = buff1 '把数据放到一个byte数组中
Dim myprice() As tt
ReDim myprice(10)
CopyMemory myprice(1), r(0), Len(myprice(0)) * 10
End Sub
这样myprice中就是vc传过来的数据。