|
|
TopPage > Java関係 > Java関係[04] |
#include <stdio.h> void hello () { printf("Hello C World!\n"); } |
[hoge]$ gcc -fPIC -shared -o libhello.so hello.c [hoge]$ ls hello.c libhello.so |
// jnaのimport宣言.JNAは最初はSun(現在はOracleに買収)で開発が始まったらしい import com.sun.jna.Library; import com.sun.jna.Native; interface HelloSOLib extends Library { // 下記の"hello"の部分は、libhello.soのlib以下の箇所と一致させる必要があるので"hello"と記載する。 HelloSOLib INSTANCE = (HelloSOLib) Native.loadLibrary("hello", HelloSOLib.class); // soファイルの中の関数名と同じものを宣言する。 void hello(); } public class HelloWJna { public static void main(String[] args){ HelloSOLib hello_func = HelloSOLib.INSTANCE; hello_func.hello(); } } |
[hoge]$ javac -cp jna.jar HelloWJna.java [hoge]$ ls HelloSOLib.class HelloWJna.class HelloWJna.java jna.jar libhello.so |
[hoge]$ java -cp .:jna.jar HelloWJna Hello C World! |
#include <stdio.h> int hello_a (int num, char *str) { int ii = 0; printf ("[%s]\n", str); for ( ii = 0 ; ii < num ; ii++ ) { printf("Hello C World![%d/%d]\n", (ii+1), num); } return (ii); } |
[hoge]$ gcc -fPIC -shared -o libhello_arg.so hello_arg.c [hoge]$ ls hello_arg.c libhello_arg.so |
// jnaのimport宣言.JNAは最初はSun(現在はOracleに買収)で開発が始まったらしい import com.sun.jna.Library; import com.sun.jna.Native; interface HelloArgSOLib extends Library { // 下記の"hello_arg"の部分は、libhello_arg.soのlib以下の箇所と一致させる必要があるので"hello"と記載する。 HelloArgSOLib INSTANCE = (HelloArgSOLib) Native.loadLibrary("hello_arg", HelloArgSOLib.class); // soファイルの中の関数名と同じものを宣言する。 int hello_a (int num, String cstr); } public class HelloWJna_arg { public static void main(String[] args){ int res_i = 0; HelloArgSOLib hello_func = HelloArgSOLib.INSTANCE; res_i = hello_func.hello_a(5, "ToC SO file"); System.out.println("return value=["+res_i+"]"); } } |
[hoge]$ javac -cp jna.jar HelloWJna_arg.java [hoge]$ ls HelloArgSOLib.class HelloWJna_arg.java libhello_arg.so HelloWJna_arg.class jna.jar |
[hoge]$ java -cp .:jna.jar HelloWJna_arg [ToC SO file] Hello C World![1/5] Hello C World![2/5] Hello C World![3/5] Hello C World![4/5] Hello C World![5/5] return value=[5] |
Native Type | Size | JavaのType |
char | 8 bit integer | byte |
short | 16 bit | short |
wchar_t | 16/32 bit character | char |
int | 32 bit integer | int |
int | boolean 値 | boolean |
long | 32/64 bit integer | NativeLong |
long long | 64 bit integer | long |
__int64 | 64 bit integer | long |
float | 32 bit 浮動小数点 | float |
double | 64 bit 浮動小数点 | double |
char * | C string | String |
void * | pointer | Pointer |
TopPage > Java関係 > Java関係[04] |