0

我有一个将结构数组作为参数的 C 函数,我想通过 SWIG 从 Java 调用这个函数,但是关于这个主题的文档似乎很模糊,我找不到任何直接解决的 stackoverflow 问题这个案例。这是一个类似于我想要做的例子:

C头文件:

typedef struct {
  int timeToPayment;
  double paymentAmount;
} Payment;
double presentValue(Payment *payments, int nPayments);

Java代码片段:

...
Class Payment {
  public int timeToPayment;
  public double paymentAmount;
};
...
Payment[] payments = new Payment[3];
payments[0].timeToPayment = 30;
payments[0].paymentAmount = 1.0;
payments[1].timeToPayment = 60;
payments[1].paymentAmount = 2.0;
payments[2].timeToPayment = 90;
payments[2].paymentAmount = 3.0;
double pv = CLIBRARY.presentValue(payments);
// also acceptable: double pv = CLIBRARY.presentValue(payments, payments.length);

如何实现?

编辑:为了提供更多信息,SWIG 是一项要求,因为它已经用于将更简单的接口合并到同一个 Java 代码库中,并且支持不止一种方法来解决这个问题是不可接受的。此外,C 函数的签名不能更改,并且此示例已极其简化;实际问题涉及多个 C 函数,其签名需要结构数组(在某些情况下是多个不同结构的数组),并且一些结构非常大,所以我真的非常不想将它们分解成等效的数组原始类型。

4

1 回答 1

0

最后,我无法完成这项工作(尽管我并不是说这不可能),并且我在 C 中创建了一个翻译层,在传递它之前将所有内容包装到一个单独的结构中。

于 2012-11-30T20:54:54.203 回答