一、简介

Java Native Interface(JNI),java与c/c++交互的接口,下面是一个简单是示例。

javah 可以生成native方法对应的头文件,javap 可以查看方法或者属性的签名。

二、示例

1、书写带native的java代码

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、通过javap查看方法和属性签名

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、运行java代码

hello native
0=nullnull

JNI_Java Native Interface的更多相关文章

  1. Java Native Interface 六JNI中的异常

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, ...

  2. Java Native Interface 五 JNI里的多线程与JNI方法的注册

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI里的多线程 在本地方法里写有关多线程的 ...

  3. Java Native Interface 四--JNI中引用类型

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI支持将类实例和数组类型(如jobjec ...

  4. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  5. Java Native Interface 编程系列一

    本文是<Java Native Interface Programmer's Guide and Specification>的读书笔记 Java Native Interface可以让编 ...

  6. Java Native Interface Specification—Contents

    http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html 1. Introduction Java Nati ...

  7. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )

    JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...

  8. Java Native Interface Specification(JNI)

    Java Native Interface Specification(JNI) 使用场景: 需要的功能,标准的java不能提供 有了一个用其他的语言写好的工具包,希望用java去访问它 当需要高性能 ...

  9. Java Native Interface调用C++代码

    概述 Java Native Interface译为Java原生接口,简称JNI.Java并不是完美的,它的不足体现在运行速度要比传统的C++慢上许多,并且无法直接访问到操作系统底层,为此Java提供 ...

随机推荐

  1. protobuf 中的嵌套消息的使用

    protobuf的简单的使用,不过还留下了一个问题,那就是之前主要介绍的都是对简单数据的赋值,简单数据直接采用set_xx()即可,但是如果不是简单变量而是自定义的复合类型变量,就没有简单的set函数 ...

  2. Javascript初级学习总结

    首先,在Html页面输出,使用document.write('内容'); <html> <head> <title></title> <scrip ...

  3. c#学习心得,慢慢添加,如果有错误希望大家留言,我刚开始学

    1.class类:相当于整个项目的一个功能性程序,为了阐述系统中某个对象的功能. 方法:相当于程序的一个功能部件.可以被其他方法或类调用?感觉这个问题有点复杂 c#框架结构:我目前接触到的 using ...

  4. video标签 拖动 转自w3school

    调整视频大小 播放 暂停 用js实现 详细参见http://www.w3school.com.cn/tiy/t.asp?f=html5_video_dom 图片的拖动详见http://www.w3sc ...

  5. Windows+Apache+PHP5配置

    今天配置Windows+Apache+PHP时,遇到的问题,记录下供大家参考,也供自己以后参考!需要特别注意的:PHP v9版本的 非线程安全的 只适用于IIS,5.3版本的NTS版的没有php5ap ...

  6. MVC-05 Model(2)

    五.使用Code First数据库迁移 当Entity Framework Code First的数据模型发生异动时,默认会引发一个System.InvalidOpertaionException异常 ...

  7. 读书笔记: nodejs API 参考

    >> bufferBuffer对象是全局对象Buffer支持的编码方式:ascii, utf8, base64, binarynew Buffer(size)new Buffer(arra ...

  8. 滚动条QScroolBar实现滚屏功能(屏幕过大,覆盖wheelEvent来处理滑轮事件)

    环境:Qt5 编译器:Qt Creator 需求:如图 显示区域win 600*300 需要显示的Widget控件show 590*550 则有600*250的show界面无法显示 使用滑块控制sho ...

  9. JAVA GUI学习 - JDialog模式、非模式窗口组件学习

    /** * JDilog学习笔记 * @author Wfei * */ public class JDialogKnow extends JFrame { JDialog jDialog; JBut ...

  10. POJ-1010 Stamps

    [题目描述] 题目大意是:邮票发行商会发行不同面值.不同种类的邮票给集邮爱好者,集邮爱好者有总目标面额,通过不同的邮票组合(总数在4张以内)达到该面值,卖给集邮爱好者.另外,发行商发行的邮票面值最多2 ...