C#调用ActiveX控件的参数传递有关问题byte[]与ref byte
C#调用ActiveX控件的参数传递问题byte[]与ref byte
我有一个C++写的ActiveX控件,其中一个导出方法是这样声明的。
我现在在一个C#程序里使用这个方法(ActiveX控件已经导入并实例化,比如叫axCtrl1),MyFunc自动生成的原型是
我是这样调用的。
上面的调用会导致System.AcessViolationException:尝试读取或写入受保护的内存。
MyFunc不会更改data,本身也没有内存泄露。(控件中有调用MyFunc的输出函数工作正常)
我估计是把byte[]强制转换成ref byte时出的问题。请有这方面经验的人来解答一下。
------解决方案--------------------
我有一个C++写的ActiveX控件,其中一个导出方法是这样声明的。
- C/C++ code
VARIANT_BOOL MyFunc(BYTE* data, LONG size, LONG param1, SHORT param2);
我现在在一个C#程序里使用这个方法(ActiveX控件已经导入并实例化,比如叫axCtrl1),MyFunc自动生成的原型是
- C# code
bool MyFunc(ref byte data, int size, int param1, short param2)
我是这样调用的。
- C# code
//byte[] data,int size, uint param1, ushort param2已经正常初始化,数据都不会出现溢出。 axCtrl1.MyFunc(ref data[0], size, (int)param1, (short) param2);
上面的调用会导致System.AcessViolationException:尝试读取或写入受保护的内存。
MyFunc不会更改data,本身也没有内存泄露。(控件中有调用MyFunc的输出函数工作正常)
我估计是把byte[]强制转换成ref byte时出的问题。请有这方面经验的人来解答一下。
------解决方案--------------------
- C# code
//byte[] data,int size, uint param1, ushort param2已经正常初始化,数据都不会出现溢出。 axCtrl1.MyFunc(ref data[0], size, (int)param1, (short) param2);
------解决方案--------------------
- C# code
extern static void XXX([MarshalAs(UnmanagedType.LPTStr)]byte[] bb,......
------解决方案--------------------
我用到过楼主的方法,数据类型匹配方式没有问题,会不会是byte数组不够大,导致越界呢?多分配点空间试试吧?
------解决方案--------------------
------解决方案--------------------
bool MyFunc(byte[] data, int size, int param1, short param2)