JNI_Java Native Interface
一、简介
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的更多相关文章
- Java Native Interface 六JNI中的异常
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 在这里只讨论调用JNI方法可能会出现的异常, ...
- Java Native Interface 五 JNI里的多线程与JNI方法的注册
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI里的多线程 在本地方法里写有关多线程的 ...
- Java Native Interface 四--JNI中引用类型
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 JNI支持将类实例和数组类型(如jobjec ...
- Java Native Interface 二 JNI中对Java基本类型和引用类型的处理
本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...
- Java Native Interface 编程系列一
本文是<Java Native Interface Programmer's Guide and Specification>的读书笔记 Java Native Interface可以让编 ...
- Java Native Interface Specification—Contents
http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html 1. Introduction Java Nati ...
- android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...
- Java Native Interface Specification(JNI)
Java Native Interface Specification(JNI) 使用场景: 需要的功能,标准的java不能提供 有了一个用其他的语言写好的工具包,希望用java去访问它 当需要高性能 ...
- Java Native Interface调用C++代码
概述 Java Native Interface译为Java原生接口,简称JNI.Java并不是完美的,它的不足体现在运行速度要比传统的C++慢上许多,并且无法直接访问到操作系统底层,为此Java提供 ...
随机推荐
- BootStrap 智能表单系列 八 表单配置json详解
本章属于该系列的高级部分,将介绍表单中一些列的配置 1.config列的配置: 主要用于控制布局 :config:{autoLayout:true|'1,2,2,4'} true:根据配置项最里层的数 ...
- tomcat管理员manager app无法进入解决方法
浏览器输入http://localhost:8080/进入tomcat页面后,点击manager app输入用户名(admin)密码(admin)后页面跳转出现如下错误:备注:tomcat7.0.39 ...
- pyhton10min系列之程序员的浪漫-足迹生成器,有视频教程
记录去过的足迹 本文为原创文章 项目主页 跪求star 程序员的浪漫,我女朋友蘑菇喜欢旅游,于是我做了这个,记录2015一起去过的地方,祝她圣诞快乐 如果觉得对你有帮助,github求个star 视频 ...
- C++获取当前机器内网IP地址
/*头文件*/ #include "winsock2.h" #pragma comment(lib,"ws2_32.lib") /*Hui 获取当前服务器IP* ...
- mybatis获取插入的语句主键(自增主键)
<insert id="insertUser" parameterType="User"> <selectKey keyProperty=&q ...
- 国内外主流BI厂商对比
BI(Business Intelligence),即商业智能或者商务智能,它是一套完整的解决方案,用来将企业中现有的数据进行有效的整合,快速准确的提供报表并提出决策依据,帮助企业做出明智的业务经营决 ...
- delphi 文件夹权限设置(执行一个小脚本的笨办法)
如题,研究了一天,也没再网上找到比较好的方式,自己做了一个.方法如下: 1.创建一个 cmd 命令文件.2.调用该命令. 代码如下: S:='echo y|cacls h: /t /c /g ev ...
- elk 添加节点
elk 添加节点: cluster.name: es_cluster node.name: node03 path.data: /elk/elasticsearch/data path.logs: / ...
- Flex 内置验证器—验证用户输入
今晚对于Flex中的Validator类(所有验证器的父类)测试一下 ---->其中常用的验证类有StringValidator,NumberValidator,DateValidator 测试 ...
- How many prime numbers(求素数个数)
How many prime numbers Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...