0

構造体の配列を引数として取る 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 関数が含まれており、構造体の一部は非常に大きいため、それらを同等の配列に分割する必要はありません。プリミティブ型。

4

1 に答える 1

0

結局、私はこれを機能させることができませんでした (不可能だと言っているわけではありませんが)、C で変換レイヤーを作成し、すべてを単一の構造体にラップしてから渡しました。

于 2012-11-30T20:54:54.203 に答える