JAVA에서 JNI의 간단한 사용 공유

3157 단어 JAVAJNI
JNI: JAVA가 크로스플랫폼 특성으로 사랑받고 있기 때문에 이 기기와 각종 내부 관계가 적어지기 때문에 JNI(Java Native Interface)는 JAVA의 로컬 조작을 해결하는 방식이다.JAVA는 JNI를 통해 로컬 메서드를 호출하고 로컬 메서드는 라이브러리 파일 형식으로 저장됩니다(WINDOWS 플랫폼에서는 DLL 파일 형식, UNIX 시스템에서는 SO 파일 형식).로컬 라이브러리 파일을 호출하는 내부 방법을 통해 JAVA는 로컬 기계와의 긴밀한 관계를 실현하고 시스템 등급의 각 인터페이스 방법을 호출할 수 있다.단계는 다음과 같다. 1. 잘 써라.java 소스 파일:

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입니다.

좋은 웹페이지 즐겨찾기