簡體   English   中英

SWIG-Java-通過引用傳遞int

[英]SWIG - Java - Pass by reference int

我有一個簡單的函數intReference

int intReference(int *intArray)

我在哪里通過引用傳遞intArray。

如何設置SWIG的接口文件以使其能夠執行此操作?

謝謝,

這是我認為您想要的模式:

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文檔中有一整節內容。 根據您的需求,您也許可以只使用內置的類型映射和SWIG指令。 例如,

%include "arrays_java.i" %apply int[] {int *};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM