【发布时间】:2012-02-14 03:24:59
【问题描述】:
是否可以使用 P-Invoke 将字符串数组从托管 C# 传递到非托管函数?
这很好用:
[DllImport("LibraryName.dll")]
private static extern void Function_Name(string message);
此时:
[DllImport("LibraryName.dll")]
private static extern void Function_Name(string[] message);
失败
未处理的异常:System.NotSupportedException: NotSupportedException
我尝试过使用MarshalAs,但没有成功([MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPWStr)] String[] dataToLoadArr)
这种方式可以传递字符串数组吗?
【问题讨论】:
-
异常信息是什么?另外,非托管函数的声明是什么?
-
this 有用吗?
-
谢谢,mtijn,这有帮助。通过使用表示要编组的字符串的 IntPtr 结构来解决。
-
我尝试时效果很好,不需要手动编组。但是,这种方法有一个严重的缺陷,本机代码无法判断数组有多大。需要一个额外的参数。
-
您使用的是什么版本的 Windows?这是 Windows CE 还是类似的东西?
标签: c# .net pinvoke marshalling unmanaged