構造体の配列を引数として取る C 関数があり、SWIG を介して Java からこの関数を呼び出したいのですが、ドキュメントはこの件に関して非常に曖昧なようで、直接対処するスタックオーバーフローの質問が見つかりません。この場合。これは、私がやりたいことに似た例です。
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);
これはどのように達成できますか?
EDIT:追加情報を提供するために、SWIGは要件です。これは、同じJavaコードベースに単純なインターフェースを組み込むためにすでに使用されており、この問題を解決するための複数のアプローチをサポートすることは受け入れられないためです。また、C 関数のシグネチャは変更できず、この例は非常に単純化されています。実際の問題には、構造体の配列 (場合によっては異なる構造体の複数の配列) を必要とする署名を持つ複数の C 関数が含まれており、構造体の一部は非常に大きいため、それらを同等の配列に分割する必要はありません。プリミティブ型。