Java와 C언어(WinAPI, win32) 연결

//======================================
* JNI(Java Native Interface)
http://codens.info/1028



//======================================
* JNA (Java Native Access)
    - 안드로이드 Dalvik VM 에서 지원 안함
    - C++ 지원 안함, C만 지원

    - JNA 설치
        - jna.jar 다운로드 : https://github.com/twall/jna
        - jna.jar 복사
- 방법 1 : 환경변수 CLASSPATH 의 경로에 복사
- 방법 2 : "IntelliJ IDEA"의 경우 File -> Project Structure -> Platform Setting -> Global Libraries : 경로추가
- 방법 3 : 컴파일시 지정 javac.exe -classpath  JNA.jar경로   ABC.java


    - JNA 예제
//=================================
//JNA1.java
import com.sun.jna.Library;
import com.sun.jna.Native;

//http://en.wikipedia.org/wiki/Java_Native_Access
public class JNA1 {
    public interface Kernel32 extends Library {
        // FREQUENCY is expressed in hertz and ranges from 37 to 32767
        // DURATION is expressed in milliseconds
        public boolean Beep(int FREQUENCY, int DURATION);
        public void Sleep(int DURATION);
    }
 
    public static void main(String[] args) {
        Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
        lib.Beep(698, 500);    lib.Sleep(500);    lib.Beep(698, 500);
    }
}

    - 컴파일
> "javac.exe" -classpath "jna.jar"  -encoding UTF-8  JNA1.java


//==================================================   
* SWIG ( Simplified Wrapper and Interface Generator )
http://swig.org/
    - C ( C++ ) 코드들을 Perl, Python, Tcl, Ruby, Java 등에서 사용가능하도록 만듬
    - JNI를 좀 더 쉽게 사용할 수 있도록 해주는 도구
    - C/C++ 인터페이스를 정의한 파일을 입력 받아 C/C++ JNI wrapper 코드를 생성
    - Dalvik VM과는 호환성 문제가 존재


//===================================================
* BridJ
    - 안드로이드 지원
https://code.google.com/p/bridj/


반응형
Posted by codens