【发布时间】:2021-03-11 15:33:58
【问题描述】:
我需要将 c# 中的双精度数组转换为 IntPtr 以正确地将其发送到我的 c DLL。我已经能够使用the method from this answer 成功地将 IntPtr 转换为 double[,]。我还发现 another answer 接近我需要的但处理一维数组。
我在我的逻辑中遗漏了一些东西,并在崩溃后得到错误代码:Managed ' has exited with code -1073740940 (0xc0000374)。
这是我目前所拥有的
IntPtr p = Marshal.AllocHGlobal(rows * columns);
for (int i = 0; i < rows; i++) //rows
{
double[] temp = new double[columns];
for (int x = 0; x < columns; x++)
temp[x] = input.cells[i, x];
Marshal.Copy(temp, 0, p, columns);
p = (IntPtr)(p.ToInt64() + IntPtr.Size);
}
toReturn.cells = p;
Marshal.FreeHGlobal(p);
return toReturn;
toReturn.cells 是我返回的结构中的 IntPtr。 单元格结构为单元格[行、列]
IntPtr 对我来说还是很陌生。
编辑:感谢哈罗德。他们的建议效果很好
【问题讨论】:
-
你有
double[][]吗?该代码似乎正在使用double [,] input -
@BenVoigt 是的,你是对的。我目前正在查看 cmets 和答案,看看我是否可以解决问题。谢谢你们的cmets!