gpt4 book ai didi

java - 如何使用 swig 调用需要来自 Java 的结构数组的 C 函数?

转载 作者:行者123 更新时间:2023-11-30 17:57:49 25 4
gpt4 key购买 nike

我有一个 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 是一项要求,因为它已经用于将更简单的接口(interface)合并到同一个 Java 代码库中,并且支持多种解决此问题的方法是 Not Acceptable 。此外,C 函数的签名无法更改,并且该示例已被极其简化;实际问题涉及多个 C 函数,其签名需要结构数组(在某些情况下是不同结构的多个数组),并且某些结构非常大,所以我真的非常不喜欢将它们分解为等效的数组原始类型。

最佳答案

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

关于java - 如何使用 swig 调用需要来自 Java 的结构数组的 C 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com