我有一个将结构数组作为参数的 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 函数,其签名需要结构数组(在某些情况下是多个不同结构的数组),并且一些结构非常大,所以我真的非常不想将它们分解成等效的数组原始类型。