Main Code 작성
패키지명 : jnitest
파일명 : JNITest
JNITest.java
public class JNITest {
static{
System.loadLibrary("NativeHello");
}
public static void main(String[] args) {
NativeHello obj = new NativeHello();
obj.sayHello();
}
}
호출할 함수 원형 작성
패키지명 : jnitest
파일명 : NativeHello
NativeHello.java
package jnitest;
public class NativeHello {
public native void sayHello();
}
위의 두 소스가 작성되었다면 메뉴에서 Run -> Build (혹은 Clean & Build) 실행.
제대로 빌드가 되었다면 "build/classes" 란 폴더 아래 패키지명과 동일한 폴더와 *.class 파일이 생성됨을 볼 수 있다. (아래의 캡쳐화면 참고)
javah 로 c/c++ 형태의 헤더파일 생성하기
콘솔창에서 해당 프로젝트의 classes 폴더까지 이동 한후
위와 같은 명령어를 실행한다. 실행하면 *.h 파일이 생성된다. (아래 화면 참고)
DLL 파일 생성
Visual Studio 을 통해 MFC DLL 프로젝트를 생성 후 "Solution Explorer" 에서 프로젝트명을 마우스 우클릭하여 (VS2008 기준)
Properties 에서 다음과같이 %JAVA_HOME%\include 와 %JAVA_HOME%\include\include\win32 폴더를 추가한다.
include directory 작업을 완료한 후 좀전 작업에서 생성되었던 헤더파일의 내용을 생성된 프로젝트의 헤더파일에COPY-PASTE 를 한다. (파일 자체를 복사해도 큰 문제는 없는듯..) 기존의 내용은 가급적 주석처리.
프로젝트내의 헤더파일명과 동일한 *.cpp 파일에서 기본으로 생성된 필요 없는 내용은 주석처리를 한 후 헤더파일에 작성되어있는 함수를 실제로 구현해준다. (다음 그림참고)
작성후 빌드 하면 *.dll 파일이 생성된다. 이 파일을 JAVA프로젝트에 복사한다. (다음 화면 참고)
이제 Run 을 하면 실제 동작화면을 볼 수 있다.
이 글은 스프링노트에서 작성되었습니다.