编组二维数组
Posted
技术标签:
【中文标题】编组二维数组【英文标题】:Marshaling two-dimensional array 【发布时间】:2014-02-06 14:45:22 【问题描述】:我要
int [10][20] //const dimensions size
从 C++ dll 到 C# 代码。有自动编组器吗?无法为如此简单的任务找到好的解决方案。
public int[,] _operators;
给出未定义的值。 是的,我可以将其制作为仅用于编组的一维,然后在 C# 中将其再次读取为 2 个维度,但是有自动简单的方法吗?
==================
我认为最好的方法是使用这样的指针:
const int 1dSize = 10;
const int 2dSize = 10;
var ret = new int[1dSize, 2dSize];
unsafe
int* ptrOnArray = NativeLibPrototypes.Get2DArrayPtr();
for (int i1 = 0; i1 < 1dSize; i1++)
for (int i2 = 0; i2 < 2dSize; i2++)
ret[i1, i2] = *ptrOnArray;
ptrOnArray++;
【问题讨论】:
【参考方案1】:试试
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 200)]
int[] _operators;
大小应该是数组中元素的数量。
查看Default Marshaling for Arrays
【讨论】:
你在哪里得到未定义的?? 当我查看调试器 _operators 我看到“?”在每个元素处,_operators[0, 0] 给我的索引超出范围...(_operators 是 C++ 类的字段,现在我评论除 _operators 之外的所有内容) 用空项目再测试一次 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 200)] 仅适用于 1d 数组,适用于 2d - 相同,不起作用以上是关于编组二维数组的主要内容,如果未能解决你的问题,请参考以下文章
P/Invoke 编组和解组 C# 和非托管 DLL 之间的二维数组、结构和指针
如何在 XLOPER 和 VARIANT 之间编组? [关闭]
C 语言数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )