当前位置: 首页 > 编程语言 > C#

如何将Int数组或指针编组为Int数组分享

时间:2023-04-11 10:30:52 C#

C#学习教程:如何编组一个Int数组或指向一个Int数组的指针如何在C#和C/C++之间编组一个int数组?函数声明如下://reads/writesintvaluesfrom/intothearray__declspec(dllimport)void__stdcallReadStuff(intid,int*buffer);int*是C中的指针吗?所以我很困惑,如果我必须使用IntPtr或者我是否可以使用int[](首选)?我认为这可能没问题:[DllImport(dllName)]staticexternvoidReadStuff(intid,[MarshalAs(UnmanagedType.SafeArray,SafeArraySubType=VarEnum.VT_I4)]refint[]buffer);//调用int[]array=newint[12];ReadStuff(1,参考数组);那行得通吗?或者如何在C#中以安全代码声明此函数?它不是SafeArray。SafeArray与Variants和OLE的美好时光有关:-)它可能存在于“dodo”一词附近的字典中。它是:[DllImport(dllName,CallingConvention=CallingConvention.StdCall)]staticexternvoidReadStuff(intid,int[]buffer);编组器将做“正确”的事情。或[DllImport(dllName,CallingConvention=CallingConvention.StdCall)]staticexternvoidReadStuff(intid,IntPtrbuffer);但是使用起来更复杂。CallingConvention=CallingConvention.StdCall是默认值,不用显式写。你这样做://callint[]array=newint[12];ReadStuff(1,数组);refint[]将是一个int**(但它可能很复杂,因为通常你接收数组,而不是发送数组:-))注意你的“接口”很差:你不能告诉ReadStuff的长度缓冲区,您无法获得必要的缓冲区长度,也无法获得实际使用的缓冲区字符数。你可以这样做:[DllImport(dllName)]staticexternvoidReadStuff(intid,IntPtrbuffer,intlength);int[]array=newint[12];不安全{fixed(int*data=&array[0])ReadStuff(1,data,array.Length);}C++代码:(未测试)以上是C#学习教程:HowtomarshalanIntarrayorpointerintoanIntarray。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——extern"C"__declspec(dllexport)VOIDWINAPIReadStuff(intid,int*buffer,intlength);点击右侧联系管理员删除。如需转载请注明出处: