JNI_Java Native Interface

1955 단어 interface
프로필
 
자바 네 이 티 브 인터페이스 (JNI), 자바 와 c / c + + 의 인 터 페 이 스 는 간단 한 예제 입 니 다.
javah 는 native 방법 에 대응 하 는 헤더 파일 을 생 성 할 수 있 습 니 다. javap 는 방법 이나 속성의 서명 을 볼 수 있 습 니 다.
예시
1. 네 이 티 브 자바 코드 쓰기
 
package com.jni;



import java.util.Date;

//javah com.jni.Hello

//com_jni_Hello.h

public class Hello {

	public int property;

	//javap -s com.jni.Hello

	//(ILjava/util/Date;[I)I

	public int function(int foo,Date date,int[] arr){

		System.out.println(foo+"="+date+""+arr);

		return 0;

	}

	public native void hello();

	public static void main(String[] args) {

		System.loadLibrary("nativeCode");

		Hello hl = new Hello();

		hl.hello();

	}

}


2, javah 를 통 해 헤더 파일 com 생 성jni_Hello.h
 
 
javah com.jni.Hello

3. 자바 p 를 통 해 방법 과 속성 서명 보기
 
 
javap -s com.jni.Hello

4. vc 또는 vs 에 DLL 프로젝트 (프로젝트 이름 은 vativeCode) 를 새로 만 들 고 생 성 된 헤더 파일 을 프로젝트 에 추가 합 니 다. 부족 한 의존 헤더 파일 이 있 으 면 jdk 디 렉 터 리 (% java home% \ include) 에서 찾 아 프로젝트 에 참여 합 니 다.
 
5. C / C + + 코드 쓰기 (. cpp 파일 중)
 
#include"com_jni_Hello.h"

#include<iostream>

using namespace std;

JNIEXPORT void JNICALL Java_com_jni_Hello_hello(JNIEnv * env, jobject obj)

{

	cout<<"hello native"<<endl; //

	jclass hello_clazz = env->GetObjectClass(obj);//  class

	jfieldID field_prop = env -> GetFieldID(hello_clazz,"property","I");//            

	jmethodID methodId_func = env->GetMethodID(hello_clazz,"function","(ILjava/util/Date;[I)I");//    

	env->CallIntMethod(obj,methodId_func,0L,NULL,NULL);//  

}

6. DLL 프로젝트 를 실행 하여 dll 파일 생 성 (nativeCode. dll) 환경 변수 에 dll 파일 설정
 
7. 자바 코드 실행
 
hello native

0=nullnull


 

좋은 웹페이지 즐겨찾기