activeX和VB之间传递大2进制对象,该用什么数据类型做接口?
我现在
VC里面用VARIANT ,VARIANT中使用SAFEARRAY
VB里面variant,
结果时实时错误13,数据类型不匹配,
这时我的部分代码//////////////VC
[id(4), helpstring("方法GetImage")] LONG GetImage(VARIANT imgBase64,LONG *base64Len);
void *pa;
::SafeArrayAccessData(imgBase64.parray,(void**)&pa);
Base64Encode((BYTE*)data,len,(LPSTR)pa,(int*)base64Len);
::SafeArrayUnaccessData(imgBase64.parray);
/////////////////VB调用
Dim height As Long, width As Long, N As Long
Dim re As Long
Dim imgBase64Data() As Byte
Dim imgBase64 As Variant
re = lgCam1.GetImgSize(height, width)//这个也时activeX控件里面的函数,声明为[id(3), helpstring("方法GetImgSize")] LONG GetImgSize(LONG* height, LONG* width);调用正确 N = height * width * 2 * 3
ReDim imgBase64Data(N) As Byte
imgBase64 = imgBase64Data
re = lgCam1.GetImage(imgBase64, N)//这里不正确,出现实时错误13,类型不匹配//////////////////////////////////////////////////////////
要我在activeX和VB中间传递大块2进制数据,该用什么数据类型做接口呢?
我现在
VC里面用VARIANT ,VARIANT中使用SAFEARRAY
VB里面variant,
结果时实时错误13,数据类型不匹配,
这时我的部分代码//////////////VC
[id(4), helpstring("方法GetImage")] LONG GetImage(VARIANT imgBase64,LONG *base64Len);
void *pa;
::SafeArrayAccessData(imgBase64.parray,(void**)&pa);
Base64Encode((BYTE*)data,len,(LPSTR)pa,(int*)base64Len);
::SafeArrayUnaccessData(imgBase64.parray);
/////////////////VB调用
Dim height As Long, width As Long, N As Long
Dim re As Long
Dim imgBase64Data() As Byte
Dim imgBase64 As Variant
re = lgCam1.GetImgSize(height, width)//这个也时activeX控件里面的函数,声明为[id(3), helpstring("方法GetImgSize")] LONG GetImgSize(LONG* height, LONG* width);调用正确 N = height * width * 2 * 3
ReDim imgBase64Data(N) As Byte
imgBase64 = imgBase64Data
re = lgCam1.GetImage(imgBase64, N)//这里不正确,出现实时错误13,类型不匹配//////////////////////////////////////////////////////////
要我在activeX和VB中间传递大块2进制数据,该用什么数据类型做接口呢?
Dim AllData(99) As Byte
Obj.GetData(VarPtr(AllData(0)),100)
然后在vc中将第一个参数其强制转化为unsing char * 即可。