jni 예제 윈도우

또한 서명 „L 정규화 클래스;“ 해당 이름으로 고유 하 게 지정 된 클래스를 의미 합니다. 예를 들어, 서명 „Ljava/lang/String;“은 java.lang.String 클래스를 나타냅니다. 또한 접두사 [시그니처에 해당 형식의 배열을 만듭니다., 예를 들어 [int 배열 형식을 의미 합니다. 마지막으로 보이드 시그니처는 V 코드를 사용합니다. 실제로 Java 명령줄 유틸리티는 Java 가상 머신에서 Java 코드를 실행한 응용 프로그램의 예입니다. 이는 대부분의 기본 형식이 JNI 헤더 파일에 의해 제공된다는 것을 보여주기 위한 것입니다. 예를 들어 부울은 jboolean으로 표시됩니다. 코드를 만드는 가장 좋은 방법은 IDE를 사용하거나 CTags를 사용하여 JNI 헤더 파일의 형식을 검사하는 것입니다. 이 hello-world 예제에서는 이러한 인수를 사용하지 않지만 나중에 사용할 것입니다. 당분간 매크로 JNIEXPORT 및 JNICALL을 무시하십시오. JNI의 일반적인 „요점“을 시작하려면 이 리포지토리의 소스 코드를 확인하십시오. env는 특히 유용합니다. C ++ 사람 env는 힙에 할당 된 클래스의 인스턴스에 대한 포인터입니다 (정확히 사실이 아니지만 탐색하는 데 도움이되는 것처럼 추론 할 수 있음) C 의 경우 env 변수는 단순히 전달 된 구조에 대한 포인터입니다.

구조가 많은 함수 포인터를 저장하는 경우 JVM 내부 함수에 액세스하는 데 사용할 수 있습니다. 괜찮은 IDE는 당신이 직접 이러한 변수를 들여다 수 있도록 시간의 수많은 양을 절약으로, 여기에 권장하지만, 당신은 또한 소스 코드 폴더에서 다른 반환 유형 (때로는 이터레이터 예제)의 함수의 샘플 구현을 찾을 수 있습니다 이 프로젝트의 JNI 함수의 C ++ 구현을 위해 Utils.cpp에서 찾을 수 있으며 자바 관련 헤더 파일 및 클래스 파일에 대해 java / 폴더에서 찾을 수 있습니다. 이 마지막 예제에서는 Java 개체를 기본 C++ 코드로 조작하는 방법을 살펴보겠습니다. 스칼라와 Java 예제 모두 네이티브 구현은 동일합니다. 코드는 다르지만 C 또는 C++에서 구현을 작성할 수 있습니다. 아래 샘플은 C++에서 Sample1.h에 정의된 모든 메서드를 구현합니다. 아래 코드를 복사하여 Sample1.cpp라는 파일에 붙여 넣습니다: Ranjith는 JNI 개념에 감사드립니다. 내 프로젝트가 JNI에 있기 때문에 뮤틀리 스레딩을 사용하여 더 많은 예제를 공유 할 수 있으므로 더 많은 도움이 필요합니다. 코드를 테스트하기 위해 이전 HelloWorld 예제의 모든 컴파일 단계를 반복해야 합니다. 이 예제에서는 헤더 파일을 „포함“ 하위 디렉토리 아래에 배치하기로 결정했습니다.

생성된 출력은 „포함myjni_HelloJNI.h“입니다. 이것은 Java의 JNI에 대한 예제 리포지토리입니다. 코드는 C ++와 Java로 작성되어 javah 및 javac와 같은 도구를 통해 JNI와 상호 작용하는 올바른 방법을 올바르게 보여줍니다. 또는 CMakeLists.txt는 CMake를 사용하여 JNI 구현과 함께 C++ 라이브러리를 컴파일하고 jnihelper.sh 셸 스크립트는 JNI 라이브러리를 신속하게 프로토타입화할 수 있는 적절한 도우미 유틸리티를 제공합니다. JNI 프레임워크에서 네이티브 함수는 별도의 .c 또는 .cpp 파일로 구현됩니다.