JNI学习1

两盒软妹~` 提交于 2020-03-07 22:05:21

java是跨平台的语言,但是在有些时候仍然是有需要调用本地代码(通常由c/c++编写)
sun公司提供的JNI是java平台的一个功能强大的接口。这个JNI接口提供了Java与操作系统本地代码相互

调用的功能。

Java中调用C/C++代码的步骤:
首先在java类中声明一个native方法。

bin/javah.exe 生成相应的c/c++头文件
按照生成的头文件编写对应的c/c++代码
编译生成dll
把dll文件加入到PATH环境变量下。
Java类中加载DLL,然后调用声明的Native方法。

使用JNI的两个弊端:
使用了JNI,那么这个Java Application将不能跨平台了。如果要移植到别的平台上,那么native代码就需

要重新进行编写。
Java是强类型的语言,而c/c++不是。因此,你必须再写JNI时更小心。


相关文件
TestNative.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class TestNative */

#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TestNative
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_TestNative_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif



TestNative.java

/**
 * @(#)TestNative.java
 *
 *
 * @author leo
 * @version 1.00 2008/3/31
 */


public class TestNative {

    public TestNative() {
    }
   
    //表示是c/c++实现
    public native void sayHello();
   
    public static void main(String[] args) {
     System.loadLibrary("nativecode.dll");
     
     TestNative tst = new TestNative();
     
     tst.sayHello();
    }
}

source.cpp

#include "jni.h"
#include "TestNative.h"
#include <iostream>
using namespace std;

JNIEXPORT void JNICALL Java_TestNative_sayHello (JNIEnv *env, jobject obj)
{
 cout << "Hello World!" <<endl;
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!