一、简介

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. ios7 UIScrollView 尺寸问题

    假设在UINavigationController内设置一个UIViewControlller,而UIViewController的第一个子视图是UIScrollView的话,UIScrollview ...

  2. 关于js封装框架类库之属性操作

    在对DOM对象操作时,往往都要涉及到其属性的操作,为了提高开发效率,同时兼顾浏览器的性能,在这简单的封装了几个常见的属性.因为是模块化,在这只是引入了部分代码,其他代码在前几篇模块封装中有写.如有不足 ...

  3. SQL(Oracle)日常使用与不常使用函数的汇总

    --日常使用的sql语句和oracle语句,有些相对使用的频率比较高,收藏起来还是比较值得的 -- 绝对值 SQL:) value Oracle:) value from dual -- 2.取整(大 ...

  4. SQL数据库的应用一(Day 24)

    哈哈,又到了新的一周.我们也开始学习新的知识了,从今天开始学习SQL数据库的一些知识.今天主要讲了一些数据库.表的创建管理,和一些约束的定义使用.(这里使用的是SQL语句)下面我就具体总结一下. 总结 ...

  5. JavaSE_ 集合框架 总目录(15~18)

    JavaSE学习总结第15天_集合框架1 15.01 对象数组的概述和使用15.02 对象数组的内存图解15.03 集合的由来及与数组的区别15.04 集合的继承体系图解15.05 Collectio ...

  6. Tomcat 启动 Debug模式

    如果debug启动遇到如下错误: ERROR: transport error 202: gethostbyname: unknown host ERROR: JDWP Transport dt_so ...

  7. mysql server5.6.28 修改数据目录

    1.查看配置文件 mysql --help | grep my.cnf 列出使用哪个配置文件(顺序推) 2.service mysql stop 3.创建新目录 mkdir /data 4.迁移之前的 ...

  8. 转: bower 客户端库管理工具

    概述 常用操作 库的安装 库的搜索和查看 库的更新和卸载 列出所有库 配置文件.bowerrc 库信息文件bower.json 相关链接 概述 注:bower下载安装依赖库实际上是使用git进行下载. ...

  9. 模拟美萍加密狗--Rockey2虚拟狗(四)

    目录(?)[+]       首先,抱怨一下.学校个破网,似乎把我端口封了,死活分不上IP,也许是是我MAC改的太频繁了,有盗号嫌疑…… 然后,正文开始…… 其实虚拟狗几天前就写完了,可这几天上不了网 ...

  10. QTableView表格滚动条样式(QSS真是细致到家了)

    环境:Qt5.3 IDE:QtCreator 效果预览: 垂直与水平滚动条样式 代码: ui->QTableView->verticalScrollBar()->setStyleSh ...