added example of mixing hand written jni code with swig
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@330 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
42d2c33bda
commit
f6f291ac35
6 changed files with 108 additions and 2 deletions
17
SWIG/Examples/java/native/Makefile
Normal file
17
SWIG/Examples/java/native/Makefile
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
TOP = ../..
|
||||||
|
SWIG = $(TOP)/../swig
|
||||||
|
SWIGOPT =
|
||||||
|
SRCS =
|
||||||
|
TARGET = libexample
|
||||||
|
INTERFACE = example.i
|
||||||
|
|
||||||
|
all:: java
|
||||||
|
|
||||||
|
java::
|
||||||
|
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
|
||||||
|
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' java
|
||||||
|
|
||||||
|
clean::
|
||||||
|
rm -f *_wrap* example.java *.class *.o *~ .~* core *.so *.sl so_locations
|
||||||
|
|
||||||
|
|
||||||
6
SWIG/Examples/java/native/README
Normal file
6
SWIG/Examples/java/native/README
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
type:
|
||||||
|
make
|
||||||
|
javac *.java
|
||||||
|
export LD_LIBRARY_PATH=. # sh
|
||||||
|
setenv LD_LIBRARY_PATH . # csh
|
||||||
|
java main
|
||||||
54
SWIG/Examples/java/native/example.i
Normal file
54
SWIG/Examples/java/native/example.i
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
/* File : example.i */
|
||||||
|
%module example
|
||||||
|
|
||||||
|
%{
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
typedef struct point {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
} Point;
|
||||||
|
|
||||||
|
|
||||||
|
Point *point_create(int x, int y) {
|
||||||
|
Point *p = (Point *) malloc(sizeof(Point));
|
||||||
|
p->x = x;
|
||||||
|
p->y = y;
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this function will be wrapped by jswig */
|
||||||
|
char *point_toString1(Point *p) {
|
||||||
|
char buf[80];
|
||||||
|
|
||||||
|
sprintf(buf, "(%d,%d)", p->x, p->y);
|
||||||
|
|
||||||
|
return strdup(buf); /* memory leak */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this one we wrapped manually*/
|
||||||
|
JNIEXPORT jstring JNICALL Java_example_point_1toString2(JNIEnv *jenv, jclass jcls, jlong jpoint) {
|
||||||
|
Point * p;
|
||||||
|
char buf[80];
|
||||||
|
jstring result;
|
||||||
|
|
||||||
|
p = *(Point **)&jpoint;
|
||||||
|
sprintf(buf, "[%d,%d]", p->x, p->y);
|
||||||
|
|
||||||
|
result = (*jenv)->NewStringUTF(jenv, buf);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
Point *point_create(int x, int y);
|
||||||
|
char *point_toString1(Point *p);
|
||||||
|
/*
|
||||||
|
Use %new to free the memory returned by point_toString1
|
||||||
|
|
||||||
|
%new char *point_toString1(Point *p);
|
||||||
|
*/
|
||||||
|
|
||||||
|
%native(point_toString2) char *point_toString2(Point *p);
|
||||||
19
SWIG/Examples/java/native/main.java
Normal file
19
SWIG/Examples/java/native/main.java
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
import example;
|
||||||
|
|
||||||
|
public class main {
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
System.loadLibrary("example");
|
||||||
|
} catch (UnsatisfiedLinkError e) {
|
||||||
|
System.err.println("Cannot load the native code.\nMake sure your LD_LIBRARY_PATH contains \'.\'\n" + e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String argv[]) {
|
||||||
|
long p = example.point_create(1, 2);
|
||||||
|
System.out.println("auto wrapped : " + example.point_toString1(p));
|
||||||
|
System.out.println("manual wrapped: " + example.point_toString2(p));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,10 +4,13 @@ SRCS = example.c
|
||||||
TARGET = libexample
|
TARGET = libexample
|
||||||
INTERFACE = example.i
|
INTERFACE = example.i
|
||||||
SWIGOPT =
|
SWIGOPT =
|
||||||
all::
|
|
||||||
|
all:: java
|
||||||
|
|
||||||
|
java::
|
||||||
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
|
$(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \
|
||||||
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' java
|
SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' java
|
||||||
|
|
||||||
clean::
|
clean::
|
||||||
rm -f *_wrap* *.o core *~ *.so *.pm myperl
|
rm -f *_wrap* *.o core *~ *.so example.java
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1,8 @@
|
||||||
Simple example from users manual.
|
Simple example from users manual.
|
||||||
|
|
||||||
|
type:
|
||||||
|
make
|
||||||
|
javac *.java
|
||||||
|
export LD_LIBRARY_PATH=. # sh
|
||||||
|
setenv LD_LIBRARY_PATH . # csh
|
||||||
|
java main
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue