日期:2014-05-18  浏览次数:21339 次

C#调用ocx控件的方法,传递ref byte参数出错
OCX使用C++写的
方法为:char MyFunc( unsigned char * src , unsigned char * result)。

我现在在一个C#程序里使用这个方法(ActiveX控件已经导入并实例化,比如叫ax),MyFunc自动生成的原型是
byte MyFunc( ref byte src , ref byte result)。
我是这样调用的,用C#
byte[] src=new byte[256];
byte[] result=new byte[256];
ax.MyFunc(ref src[0], ref result[0])

出现异常:
检测到 InvalidVariant
Message: 从非托管 VARIANT 转换为托管对象的过程中检测到无效 VARIANT。将无效 VARIANT 传递给 CLR 会导致意外的异常、损坏或数据丢失。

参数传递应该是正确的,不知道是怎么回事。
请高手帮帮忙!!!

------解决方案--------------------
探讨
参数为ref byte类型,函数byte MyFunc( ref byte src , ref byte result)
如果byte[] src=new byte[256];
byte[] result=new byte[256];
ax.MyFunc(ref src[0], ref result[0])
这样传递的是整个数组,不是一个字节。这样应该是正确的,不知道为什么还是报错……