SWIG - Java - 通过引用传递 int [英] SWIG - Java - Pass by reference int

查看:62
本文介绍了SWIG - Java - 通过引用传递 int的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的函数 intReference

I have a simple function intReference

int intReference(int *intArray)

我通过引用传递 intArray 的地方.

Where I am passing intArray by reference.

我如何设置 SWIG 的接口文件以使其能够做到这一点?

How do I set the interface file for SWIG such that it can do that?

谢谢,

推荐答案

这就是我认为你想要的模式:

This is the pattern I think you want:

intReference.i

%module intReference
%{
 extern int intReference(int intArray[]);
%}

%typemap(jtype) int intArray[] "int[]"
%typemap(jstype) int intArray[] "int[]"
%typemap(javain) int intArray[] "$javainput"
%typemap(jni) int intArray[] "jintArray"
%typemap(in) int intArray[] {
  jboolean isCopy;
  $1 = JCALL2(GetIntArrayElements, jenv, $input, &isCopy);
}
%typemap(freearg) int intArray[] {
  JCALL3(ReleaseIntArrayElements, jenv, $input, $1, 0);
}


extern int intReference(int intArray[]);

intReference.c

int intReference(int intArray[]) {
    intArray[0] = 42;
    return 43;
}

编译:

swig -java *.i
javac *.java

export JAVA_HOME=/usr/local/jdk1.8.0_60/
gcc -shared *.c -I "${JAVA_HOME}/include" -I "${JAVA_HOME}/include/linux" -o libintReference.so

测试代码(java)

System.loadLibrary("intReference");
int intArray[] = new int[1];
intReference.intReference(intArray);
System.out.println("intArray[0] = " + intArray[0]);

这篇关于SWIG - Java - 通过引用传递 int的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆