JAVA에서 JNI의 간단한 사용 공유
package com.home;
public class Testdll {
//
static {
System.loadLibrary("hello");
}
// ,native
public native static int get();
public native static void set(int i);
public static void main(String[] args) {
Testdll test = new Testdll();
test.set(5);
System.out.println(test.get());
}
}
2,javactestdll로.java를 컴파일하면testdll이 생성됩니다.class.3. 그리고javah 명령으로testdll을 생성합니다.h 파일, 이 파일은 C/c++ 프로그램에 의해 필요한 라이브러리 파일을 생성해야 합니다.주의: 먼저 src 디렉터리에 들어가서javah-classpath를 실행합니다. -jni com.home.Testdll4, 생성된.h 헤더 파일, C/C++가 해야 할 일은 그것의 각 방법을 구체적으로 실현하는 것이다.그리고 컴파일하여 라이브러리 파일로 연결하면 됩니다.라이브러리 파일을 JAVA 프로그램의 경로 아래로 복사하면 JAVA로 C/C++가 구현한 기능을 호출할 수 있습니다.이것은 방금 생성된 것이다.h 헤더 파일(com_home_Testdll.h)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_home_Testdll */
#ifndef _Included_com_home_Testdll
#define _Included_com_home_Testdll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_home_Testdll
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_home_Testdll_get
(JNIEnv *, jclass);
/*
* Class: com_home_Testdll
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_home_Testdll_set
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
구체적으로 실현될 때 우리는 이 두 함수의 원형에만 관심을 갖는다
JNIEXPORT jint JNICALL Java_com_home_Testdll_get (JNIEnv *, jclass);
JNIEXPORT void JNICALL Java_com_home_Testdll_set (JNIEnv *, jclass, jint);
여기서 JNIEXPORT와 JNICALL은 모두 JNI의 키워드로 이 함수가 JNI에 호출될 것임을 나타낸다.한편, jint는 JNI를 중개로 하여 JAVA의 int 유형을 로컬 int와 소통시키는 유형으로 우리는 보지 않고 int로 사용할 수 있다.함수 이름은 JAVA_자바 프로그램의 패키지 경로를 추가하고 함수 이름을 추가하여 구성합니다.매개 변수 중, 우리도 JAVA 프로그램에 존재하는 매개 변수에만 관심을 가져야 하며, JNIENv*와 jclass는 일반적으로 그것을 건드릴 필요가 없다.5. 우리는 testdll을 사용합니다.cpp 파일은 이 두 함수를 구체적으로 실현합니다
#include "com_home_Testdll.h"
int i = 0;
JNIEXPORT jint JNICALL Java_com_home_Testdll_get (JNIEnv *, jclass)
{
return i;
}
JNIEXPORT void JNICALL Java_com_home_Testdll_set (JNIEnv *, jclass, jint)
{
i = j;
}
6, DLL 라이브러리 파일로 컴파일합니다.이름은 hello(JAVA에서 호출해야 하는 것과 일치해야 함)입니다.조작은 VS의cl명령 7을 사용하여hello를 사용할 수 있습니다.dll을 Testdll로 복사합니다.class의 디렉터리에서 자바 Testdll을 실행하면 OK입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.