1
我正在使用SWIG爲我的一個C庫生成Java綁定。但是我在處理C指針時遇到了麻煩。下面是一些代碼來證明我的問題:SWIG:如何處理生成的Java代碼中的指針
的calc.h
文件:
extern int sum(int a, int b);
extern int sum_1(int *a, int *b);
的calc.c
文件:
#include "calc.h"
int sum(int a, int b) {
return a + b;
}
int sum_1(int *a, int *b) {
return *a + *b;
}
的calc.i
文件:
%module calc
%{
#include "calc.h"
%}
%include "calc.h"
我用下面的命令生成Java綁定荷蘭國際集團代碼:
gcc -c calc.c
swig -java calc.i
gcc -fpic -c calc_wrap.c -I/usr/lib/jvm/java-1.8.0/include -I/usr/lib/jvm/java-1.8.0/include/linux
ld -G calc_wrap.o calc.o -o libcalc.so
現在對於我的主要FUNC:
public class Application {
static {
System.loadLibrary("calc");
}
public static void main(String[] args) {
System.out.println(calc.sum(1, 2));
// System.out.println(calc.sum_1(?, ?));
}
}
上面的代碼通常會編譯&運行並打印出3
預期。問題是,如何使用calc.sum_1
func?我完全不知道如何處理int *
類型。
FYI,通過附SWIG產生一些代碼:
的calc.java
文件:
public class calc {
public static int sum(int a, int b) {
return calcJNI.sum(a, b);
}
public static int sum_1(SWIGTYPE_p_int a, SWIGTYPE_p_int b) {
return calcJNI.sum_1(SWIGTYPE_p_int.getCPtr(a), SWIGTYPE_p_int.getCPtr(b));
}
}
的calcJNI.java
文件:
public class calcJNI {
public final static native int sum(int jarg1, int jarg2);
public final static native int sum_1(long jarg1, long jarg2);
}
的SWIGTYPE_p_int.java
文件:
public class SWIGTYPE_p_int {
private transient long swigCPtr;
protected SWIGTYPE_p_int(long cPtr, @SuppressWarnings("unused") boolean futureUse) {
swigCPtr = cPtr;
}
protected SWIGTYPE_p_int() {
swigCPtr = 0;
}
protected static long getCPtr(SWIGTYPE_p_int obj) {
return (obj == null) ? 0 : obj.swigCPtr;
}
}
非常感謝您的幫助!