如何编组多维数组

时间:2014-03-04 19:47:02

标签: .net multidimensional-array f# marshalling

我们有一些涉及矩阵的互操作代码。我试图调用本机DLL,并且大多数情况下它非常可靠。

我依赖于default marshalling by .net,避免使用非托管指针,而是大部分使用.net数组,可能还有byref。 .net文章说,多维数组被隐式编组为列主要的一维数组,这很好。

唯一似乎不起作用的是尝试编组多维数组,因为F#编译器抱怨float[,]声明中不允许extern。这种限制有什么办法吗?

我知道F#PowerPack中的PinnedArrayPinnedArray2类型,但我一直在寻找依赖托管指针的解决方案 - 更重要的是 - 我希望避免包括F#PowerPack作为PinnedArray类的依赖项。

1 个答案:

答案 0 :(得分:1)

通过下面链接中关于Blittable和Non-Blittable类型的描述你可以尝试使用System.Double代替float,因为它们在托管和非托管代码之间传递时不需要转换,这意味着没有更多的特殊处理由interop marshaler加上表现:https://msdn.microsoft.com/en-us/library/75dwhxf7%28v=vs.110%29.aspx

我进行了搜索,发现了这个可能对您有帮助的相关主题:

Threat like a single array: http://stackoverflow.com/a/18607817/4597705