java에서 dll을 부르는 방법은 크게 3가지가 있다.
JNI, JNA, SWIG
보통 많이 쓰는게 JNI이고, 친구회사에서 SWIG를 쓴다고도 들었다.
JNA는 또한 코드가 간편해서 쓰기편하다.
하지만 JNI는 C/C++이 모두 되지만, JNA는 C++에서 문제가 있는거 같다.
C로 파일을 만든다면 JNA로 개발하는 것도 좋을것같다.
저는 C++ 파일을 불러와 써야하기 때문에 JNI로 개발을 시작하게 되었습니다.
개발 순서
1. dll에 있는 함수를 쓰기 위해서 dll의 함수와 똑같은 함수를
자바 코드로 작성하고 dll에 있는 내용을 쓰는식으로 해야한다.
*그래서 자바 코드 작성부터 시작한다.
(dll을 불러오는데 자바 코드를 왜 작성하는지 이해를 못해서 한참 책을 몇번을 읽었는지 모른다)
2. 자바 코드 작성 후 자바 헤더를 만들어준다.
3. c에 내가 만든 자바 헤더를 첨부하고 dll을 만들어준다.
4. 자바에서 dll을 읽어준다.
1. 자바 코드 작성
package jnitest;
public class HelloWorld {
static {
System.load("C:\\Users\\1\\windcall\\jnitest\\src\\helloworld.dll");
}
public static void main(String[] args) {
HelloWorld h = new HelloWorld();
String a = "AA\n";
int[] b = {1,2,3};
char[] c = {'a','b','c'};
System.out.println(a);
h.show1();
h.show2(9);
h.show3(b);
h.show4('d');
h.show5(c);
h.show6(a);
h.show6();
}
public void func() {
System.out.println("func");
}
public native void show1();
public native void show2(int i);
public native void show3(int i[]);
public native void show4(char c);
public native void show5(char c[]);
public native void show6(String s);
public native void show6();
}
자바 코드 설명
1. static 으로 적힌 부분은 나중에 내가 만들 dll파일을 불러들일 코드이다.
처음 파일을 만들때는 경로가 저게 아니였는데 나중에 바꿔도 문제는 없었으니
일단 파일 타이틀을 쓰도록 합시다.
System.load("HelloWorld")
2. 자바 실행부분입니다.
dll을 부르더라도 그 함수를 직접 사용할 순 없습니다. 엄연히 다른 코드니까요.
그래서 3번 부분을 작성하여 함수를 불러오되 함수 안의 내용은 dll로 받아올것입니다.
3. native
이 예제는 이제 부터 만들 c코드 안에 있는 함수 리스트를 작성한 부분이다.
앞으로 c코드에는 show1~ 6 까지의 코드를 작성하고 그 함수안에 내용을 작성할 겁니다.
자바의 인터페이스라고 생각하면 될거 같다.
2. 자바 class 파일 만들기
이렇게 작성한 자바 코드를 class 파일로 만들어 준다.
3. 자바 헤더 파일 만들기 (패키지명 확인 필수)
헤더를 만들때는 작성한 파일의 패키지 명이 중요하다.
HelloWorld.java가 있는 파일에 패키지가 있는 폴더를 똑같이 만들어 줍니다.
만약 패키지 명이 package a.b.c; 이런식이라면 a\b\c 식의 폴더를 만들어 주어야 합니다.
저는 jnitest 폴더 아래에 class 파일을 넣었습니다.
다시 java가 있는 폴더로 돌아와 헤더를 만듭니다.
이렇게 헤더파일을 생성했습니다.
java10부터는 헤더 생성이 달라졌습니다.
-h 라는 옵션을 이용하면 폴더를 만들거나 할 필요가 없습니다. :)
그럼 이렇게 파일이 생성 됩니다.
javah 옵션은 없어졌습니다.
이 다음편에서 헤더파일 내용과 C를 작성하는 방법을 알아보겠습니다.
'자바 코드' 카테고리의 다른 글
JNI로 개발하기 (4. C 컴파일 및 자바로 dll실행하기) (1) | 2021.03.17 |
---|---|
JNI로 개발하기 (3. 자바헤더파일 및 C 파일) (0) | 2021.03.17 |
JNI로 개발하기 (1.MinGW 설치 "the file has been downloaded incorrectly") (1) | 2021.03.17 |
20201228 자바 자동 업데이트 (0) | 2020.12.28 |
자바) RXTX 설치하고 세팅하기 (2) | 2020.10.02 |
댓글