首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#调用ActiveX控件的参数传递有关问题byte[]与ref byte

2012-03-18 
C#调用ActiveX控件的参数传递问题byte[]与ref byte我有一个C++写的ActiveX控件,其中一个导出方法是这样声

C#调用ActiveX控件的参数传递问题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数组不够大,导致越界呢?多分配点空间试试吧?
[解决办法]
探讨

我的控件是ocx的,导入的时候VS自动生成了AxInterop.CtrlLib和InterOp.CtrlLib,两个dll,里面已经把原型写死了。

[解决办法]
bool MyFunc(byte[] data, int size, int param1, short param2)

热点排行