java - SWIG - Java 代理类数组参数

标签 java c++ swig

我认为这将是一个简单的问题,但我很难找到答案。

我有一个用 C++ 定义的结构,比方说:

struct MyStruct
{
  int a;
  int b;
};

这被 SWIG 包装到 Java 代理类 MyStruct 中。我在 C++ 中有一个函数,它采用 struct MyStruct 数组:

void myFunction(struct MyStruct arg[], int amount);

SWIG 看到一个指针参数,因此生成函数的 Java 包装器以使用单个 MyStruct 对象作为其参数:

void myFunction(MyStruct arg, int amount) { /**/ }

如何让 SWIG 生成 Java 函数以获取 MyStruct Java 对象数组?我已经能够为原始类型的数组弄清楚它,但还没有找到一种方法让它适用于自定义包装类型。

所以我想要的 Java 函数签名是这样的:

void myFunction(MyStruct[] arg, int amount);

编辑:更新措辞以使用代理类的正确 SWIG 命名法。

最佳答案

我能够使用来自 carrays.i 的 %array_class 以及 injavain 生成的中间数组类来创建工作解决方案类型图。可以在我的 gist 中找到包含该解决方案的完整工作示例。 .

如果有人能提出更好的解决方案或改进,我将不胜感激。我的解决方案的一个缺点是您需要为每个您希望以这种方式使用的不同代理类创建一个额外的 Java 数组代理类,这可能会使 Java API 变得困惑。这可以通过使用 javaclassmodifiers 类型映射使数组代理类包私有(private)来稍微改进。

关于java - SWIG - Java 代理类数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46935969/

相关文章:

c++ - gdb 中的打印值什么时候会不正确?

c++ - 当算术运算溢出时,它们会产生确定性数字吗?

c++ - 错误编译 "CONDITION_VARIABLE undeclared"

c++ - 如何使用 SWIG 在 C++ API 上生成 C 包装器?

c - SWIG:结构字段的 "out"类型映射需要访问相同结构的另一个字段

java - tomcat运行但404无错误返回

java - 跟踪 JSF 玩过的游戏

java - 使用 --add-reads 运行 java 无法识别模块,即使它在使用 --list-modules 运行时出现

java - 使用 wait() 和 Notify() 在 4 个线程之间执行线程间通信时出现 IllegalMonitorStateException

java - Swig,将c指针转换为float[]