Archive for the ‘JNA’ Category
-
Hello, Win32 API(JNA) World!
Posted on 5月 2nd, 2012 by cx20
Win32 API(JNA)
Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
以下は JNA(Java Native Access)による呼出し例である。ソースコード
import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; public class Hello { public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class); int MessageBoxA(int hwnd, String text, String caption, int type); } public static void main(String[] args) { User32 user32 = User32.INSTANCE; user32.MessageBoxA(0, "Hello, Win32 API(JNA) World!", "Hello, World!", 0); } }
Win32 データ型と JNA データ型の対応は主に以下のようになっている。
Win32 データ型 C/C++ データ型 Java/JNA データ型 BYTE char byte SHORT short short WCHAR wchar_t char INT int int BOOL int boolean LONG long NativeLong(JNA データ型) LONGLONG __int64 long FLOAT float float DOUBLE double double LPCSTR const char * String LPCWSTR const wchar_t * WString(JNA データ型) LPINT int * IntByReference(JNA データ型) LPVOID void * Pointer コンパイル&実行方法
C:¥> javac -cp jna.jar;. Hello.java C:¥> java -cp jna.jar;. Hello
実行結果
--------------------------- Hello, World! --------------------------- Hello, Win32 API(JNA) World! --------------------------- OK ---------------------------
-
Hello, JNA World!
Posted on 4月 9th, 2012 by cx20
JNA
JNA(Java Native Access)は、Java から C言語などの共有ライブラリにアクセスするライブラリである。
ソースコード
import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform; public class Hello { public interface CLibrary extends Library { CLibrary INSTANCE = (CLibrary) Native.loadLibrary(Platform.isWindows() ? "msvcrt" : "c", CLibrary.class); void printf(String format, Object... args); } public static void main(String[] args) { CLibrary c = CLibrary.INSTANCE; c.printf("Hello, JNA World!n"); } }
コンパイル&実行方法
$ javac -cp jna.jar:platform.jar:. Hello.java $ java -cp jna.jar:platform.jar:. Hello
実行結果
Hello, JNA World!