如何编组多维数组

Dan*_*ian 66 .net f# marshalling multidimensional-array

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

我依赖.net默认编组,避免使用非托管指针,而不是大部分使用.net数组,也许是byref在这里和那里..net文章说,多维数组被隐式编组为列主要的一维数组,这很好.

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

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

And*_*sio 1

通过下面链接中有关 Blittable 和 Non-Blittable 类型的描述,您可以尝试使用 System.Double 代替 float,因为它们在托管和非托管代码之间传递时不需要转换,这意味着互操作不再需要进行特殊处理具有性能优势的封送拆收器:https://msdn.microsoft.com/en-us/library/75dwhxf7%28v=vs.110%29.aspx

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

Threat like a single array: http://stackoverflow.com/a/18607817/4597705
Run Code Online (Sandbox Code Playgroud)