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提供 ...
随机推荐
- android 视频播放器的INTENT-FILTER属性
<intent-filter> <action android:name="android.intent.action.VIEW&quo ...
- Glog
Glog的简单入门,glog虽然在配置参数方面比较麻烦,但是在小规模程序中,由于其简单灵活,也许会有优势. 0, glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活 ...
- Windows配置Python编程环境
1.安装Python https://www.python.org/ 2.修改环境变量 将安装python的路径加到path路径 3.配置notepad++ a. notepad++/运行/“运行”按 ...
- javascript模块化编程(转载)
Javascript 模块化编程 作者: 阮一峰 发布时间: 2013-01-08 18:04 阅读: 7632 次 推荐: 40 原文链接 [收藏] 随着网站逐渐变成"互 ...
- 同时安装VS2010,VS2012
>LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏用vs2010打开工程,同时电脑上安装了高版本的VS,vs2012(vs2013)时会出现这 ...
- MVC-03 控制器(3)
Controller负责处理浏览器来的所有要求,并决定响应什么属性给浏览器,以及协调Model与View之间的数据传递.在ASP.NET MVC中有好几种传递数据给视图的方式,例如从ASP.NET M ...
- Boyer–Moore (BM)字符串搜索算法
在计算机科学里,Boyer-Moore字符串搜索算法是一种非常高效的字符串搜索算法.它由Bob Boyer和J Strother Moore设计于1977年.此算法仅对搜索目标字符串(关键字)进行预处 ...
- 宣布与 NBC 合作直播索契冬季奥运
奥运开始的那天早些时候,NBC 和 Microsoft 宣布选择 Windows Azure 媒体服务为 2014 年俄罗斯索契冬奥会提供现场直播.与以往不同,以往的冬奥会采用了有限的流,但本届 ...
- 对于java用发送http请求,请求内容为xml格式
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.ByteArrayOutputStr ...
- 信号量多-threaded同步Semaphore
Semaphore它是JDK1.5一个实现后,外面有个办法同步.Semaphore能够保持其当前的线程接入号码.并提供了一个同步机制. 采用Semaphore时,可以用相同的对资源的访问进行控制的线程 ...