描述:
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进制数据,2方分别该用什么数据类型做接口呢?
解决方案1:
直接Dim imgBase64 As Variant,然后在接口中设置变量接收imgBase64的地址,控件中分配空间,VB中直接用imgBase64(i)就可调用了,不用担心循环操作的效率问题,COM会搞定
解决方案2:把数据封装成COM对象,用C++实现接口,传递接口指针就可以了