|
|
| 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] |