Home Forums Job & Work Life JNI 는 기존 C/C++ 함수를 호출하는데 사용한다고 하면서, 왜? JNI 는 기존 C/C++ 함수를 호출하는데 사용한다고 하면서, 왜? Name * Password * Email 위에서 보여주신 예문도 유투브에 있는 튜터리얼과 마찬가지로, 자바로 구현하는 것보다 (또는 없어서) C/C++ 로 구현하려고 할 때의 사례입니다. 그렇기 때문에 새롭게 함수를 작성하고 헤더도 JNIEXPORT 를 사용해서 정의하구요. 제가 질문하는 것은 제3자 DLL 라이브러리 안의 함수를 호출하는 것입니다. 즉, 소스 코드가 없는 DLL 파일과 그 안의 각 함수 헤더만 알고 있을 때, 그 함수를 자바에서 어떻게 호출하냐는 것이죠. 가령, 하드웨어를 제어하는 디바이스 드라이버를 DLL 로 제공 받았을 때, 그 안의 함수들을 자바에서 호출하는 방법을 찾고 있었습니다. 하지만, 지금까지 찾아봤지만, 모두 자기가 필요에 의해서 C/C++ 로 새롭게 작성한 함수를 자바에서 호출하는 것만 보여주더군요. 더 찾아보니, 저와 똑같은 질문을 발견했습니다. 그런데 답변은 JNI 보다는 JNA 를 사용하라는군요. 그게 더 쉽다고. https://stackoverflow.com/questions/31778178/using-java-to-access-a-third-party-dll http://blog.mwrobel.eu/how-to-call-dll-methods-from-java/ https://stackoverflow.com/questions/25454697/how-to-call-a-method-in-dll-in-a-java-program 그러는 와중에 두번째 게시글에 이런 코멘트를 발견했습니다. <strong>Due to these restrictions of JNI a DLL called from your code must be specifically made for your code. To use an arbitrary DLL from Java you usually have to create an adapting DLL with the conventions of JNI that itself loads the "target" DLL and calls the required functions.</strong> 요점은 자바에서 제3자 라이브러리 함수를 호출하려면 중간 단계를 거치는 방식의 (wrapper 라고 불리는) JNI 방식이 있고, 중간 단계 없이 직접 호출하는 JNA 라는 방식이 있는 것 같네요. 아직까지 JNI 를 이용해서 제3자 라이브러리 함수를 (소스 없고 함수 헤더만 제공, 디바이스 드라이버들 처럼) 호출하는 방식은 못찾았습니다. 더 찾아보겠습니다. 더 I agree to the terms of service Comment