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

MarshalC++intarraytoC#分享

时间:2023-04-10 15:05:39 C#

MarshalC++intarraytoC#我有一个非托管C++DLL,其中包含:DLL_EXPORTint*fnwrapper_intarr(){int*test=newint[3];测试[0]=1;测试[1]=2;测试[2]=3;返回测试;}标题extern"C"DLL_EXPORTint*fnwrapper_intarr();声明extern"C"DLL_EXPORTint*fnwrapper_intarr();然后我使用pinvoke将其编组到C#:[DllImport("wrapper_demo_d.dll")][return:MarshalAs(UnmanagedType.SafeArray)]publicstaticexternint[]fnwrapper_intarr();我使用这样的函数:int[]test=fnwrapper_intarr();但是,在程序执行期间,我收到以下错误:SafeArray无法编组到此数组类型,因为它具有非零下限或多于一维。我应该使用什么数组类型?或者有没有办法编组数组或整数向量?[DllImport("wrapper_demo_d.dll")]publicstaticexternIntPtrfnwrapper_intarr();IntPtrptr=fnwrapper_intarr();整数[]结果=新整数[3];Marshal.Copy(ptr,result,0,3);您还需要在非托管Dll中编写一个Release函数,用于删除由fnwrapper_intarr创建的指针。此函数必须接受IntPtr作为参数。以上就是C#学习教程:MarshalC++intarraytoC#分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—DLL_EXPORTvoidfnwrapper_release(int*pArray){delete[]pArray;}[DllImport("wrapper_demo_d.dll")]publicstaticexternvoidfnwrapper_release(IntPtrptr);IntPtrptr=fnwrapper_intarr();...fnwrapper_release(PTR);,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢