【发布时间】:2020-08-19 18:39:17
【问题描述】:
我有一个带有double* 参数的dll,例如xyz(double* a, double* b)。我正在使用这个 DLL 将两个双精度数组传递给函数 xyz。问题是,当我使用 a 通过引用传递一个双精度数组时,该数组正在更新,但值被四舍五入,当您在 int 之间进行类型转换时会发生这种情况。你能告诉我一种将这个双数组发送到 c dll 并以十进制形式获得所需结果的有效方法吗? (更改 DLL 不是一种选择)。我也尝试了 Marshal,我不完全确定我是否做对了,但是每当我将 xyz 的参数更改为 xyz(IntPtr a, double* b) 或我曾经得到 AccessViolationException 的东西时,都会损坏内存。
【问题讨论】:
-
将参数声明为
double[]并传递数组。很简单。您可能错误地使用了ref double[],但我们无法知道,因为您没有显示代码。 -
从您的 cmets 关于“四舍五入”和“小数”的情况来看,我想知道您的互操作是否真的没有问题,也许您的问题在这里得到了真正解决:stackoverflow.com/questions/588004/…
标签: c# arrays pointers marshalling dllimport