这很好用:
[Dllimport("libraryname.dll")]private static extern voID Function_name(string message);
这个:
[Dllimport("libraryname.dll")]private static extern voID Function_name(string[] message);
失败了
Unhandled exception: System.NotSupportedException: NotSupportedException
我试过没有运气使用MarshalAs([MarshalAs(UnmanagedType.LPArray,ArraySubType = UnmanagedType.LPWStr)] String [] dataToloadArr)
是否可以通过这种方式传递字符串数组?
解决方法[Dllimport(library)]private static extern IntPtr clCreateProgramWithSource(Context context,cl_uint count,[In] [MarshalAs(UnmanagedType.LPArray,ArraySubType = UnmanagedType.LPStr,SizeParamIndex = 1)] string[] strings,ArraySubType = UnmanagedType.SysUInt,SizeParamIndex = 1)] IntPtr[] lengths,out ErrorCode errcodeRet);public static Program CreateProgramWithSource(Context context,string[] strings,IntPtr[] lengths,out ErrorCode errcodeRet)
这在我的OpenCL库OpenCL.NET(http://openclnet.codeplex.com/SourceControl/changeset/vIEw/94246#1251571)中运行良好.请注意,我也使用SizeParamIndex传递计数.
总结以上是内存溢出为你收集整理的使用P-Invoke将托管C#中的字符串数组传递给非托管函数全部内容,希望文章能够帮你解决使用P-Invoke将托管C#中的字符串数组传递给非托管函数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)