【发布时间】:2014-04-17 08:19:44
【问题描述】:
我有一个试图从 c# 访问的 c 函数库。我已经尝试过 PInvoke 路由,但是有包含可变长度数组的结构,所以这种方法不起作用,我被建议尝试 c++/cli。在研究了它(并提出了更多问题)之后,我为我的一个 c 函数创建了一个包装类。 c 函数的输入是一个结构,它包含两个双精度数组和一个数组的长度(另一个是固定大小),以及一个双精度数组。我能够为我的包装器创建一个小测试应用程序(clr 控制台),所以我知道它调用了 c 代码并做了它应该做的事情,我现在只需要弄清楚如何从 c# 调用它。由于它现在是一个托管 dll,因此我已将其添加到我的引用中,我可以将其放入代码中,但方法签名已将数组转换为我无法在 c# 中执行的指针。我尝试只使用 ref 对数组进行 apssing,但无法弄清楚如何使其工作。
c++ 签名:
static void test_wrapper(double prefix[], double arr[], int arrayLength, double value);
所以当我在 c# 中调用它时:
Test_Wrapper_Class.test_wrapper(???, ???, array.Length, 2.2);
然而 ???正在显示它期待一个双 *,我不太确定为此投入什么。
对于奖励积分,我想返回一个双精度数组,但不确定采用哪种方式。对此的选择是:
- 只需重复使用 arr,因为返回的数组大小相同
- 在输入中添加另一个 double[] 并填充那个
- 返回一个双精度[]
【问题讨论】: