Archive for the ‘JNA’ Category

  1. 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   
    ---------------------------
  2. 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!