日期:2014-05-17  浏览次数:20848 次

C#中向OCX中传递数组,过大的话,总出现内存读写问题
C#调用OCX,其中一个参数为一个50多万字节(将近0.5兆大小)的字节数组
C#中new一个50多万字节的数组,如果传递这个50多万字节的数组的话,会出现内存读写问题
如果传递少点,比如说2万个字节的话,就没问题
OCX中在这里出现问题的地方,就是一个C语言库的内存拷贝函数,memcpy

我不确定是不是因为字节过多导致这个问题,别处也没发现什么不对的地方

请问,会不会是因为字节过多导致的?

C#中代码
Byte[] lpBuf = new Byte[nBytes]; //nBytes=512356
WT_OCX.SetImage(nWidth, nHeight, nBitCount, ref lpBuf[0], 0x6000);   

VC的OCX中出现内存读写问题的代码
memcpy(global.imgInput.m_lpBuf, lpImage, global.imgInput.m_nLineLength * nHeight);\\一共要复制512356个字节


------解决方案--------------------
是不是有什么地方越界了?

我感觉内存不足出现的异常应该不是memory corrupt这类的。
------解决方案--------------------
1 byte[]的长度没传过去,ocx计算的和c#传的是否一致;
2 把c#中 ref byte[] 改为 IntPtr 传看.
------解决方案--------------------
尝试读写受保护的内存,这通常指示其它内存已破坏

这种就是使用越界的内存的错误了。

我觉得500k不大,应该不会引起内存不足的错误。