C#中怎么将int数组传递给ref int型参数
C#调用VC写的OCX
VC的OCX中的一个函数的参数为指针类型,C#将其对应为了ref int
在C#中应该怎么传递数组给这个ref int型参数呢?
————————————————————————————————————
C#?
OCX
ref?int
------解决方案--------------------用int[]
------解决方案--------------------
IntPtr[] ptArray = new IntPtr[1];
ptArray[0] = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)) * 65535);
IntPtr pt = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)) * 1);
Marshal.Copy(ptArray, 0, pt, 1);
callmethod(ref pt);
for (int i = 0; i < 65535; i++)
{
int n = (int)Marshal.PtrToStructure((IntPtr)((UInt32)ptArray[0] + i * sizeof(int)), typeof(int));
}
Marshal.FreeHGlobal(ptArray[0]);
Marshal.FreeHGlobal(pt);
------解决方案--------------------int[] a = new int[6];
传递ref a[0]即可。
------解决方案--------------------你说的结构数组是什么东西?
------解决方案--------------------byte[]
------解决方案--------------------你的RECT长度是多少?先确定下那个结构体的总长度,如果RECT的长度也是1个字节,那么这个结构体就是4字节的了,那就相当于一个Int32类型的长度了,之后的简单了,直接创建Int32的数组,进行数据拷贝。
------解决方案--------------------你先输出下那个Marshal.SizeOf(typeof(THREGION))的结果,倒底是多少?(后续数据处理应该要用到。)
而你的错误是因为传递了错误的长度,那个nMaxRegionCount是结构体数组的长度,而不是buff数组的长度,这里必须传递buff数组的长度的长度,否则在写入该数组时就可能写到数组外面去了,最后那个那个nRealRegionCount则是返回你实际用到的长度。
------解决方案--------------------你看看这个函数的定义是在哪里,能不能修改,因为一般接口函数不是用IntPtr传递,就是用ref byte,ref int非常不适合数据类型的转换。
另外你想办法测试下C++里面封装的结构体大小,你这里是20,C++里面必须也是20呀。