博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JNI_Java Native Interface
阅读量:6431 次
发布时间:2019-06-23

本文共 1366 字,大约阅读时间需要 4 分钟。

hot3.png

一、简介

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.hpublic 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
  using namespace std;  JNIEXPORT void JNICALL Java_com_jni_Hello_hello(JNIEnv * env, jobject obj)  {      cout<<"hello native"<
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

转载于:https://my.oschina.net/sandant/blog/371141

你可能感兴趣的文章
【函数】06、装饰器的应用
查看>>
v$sysstat
查看>>
剑指offer 66通关纪念
查看>>
医疗信息化 医学 医院管理 医疗器械 资料下载
查看>>
nginx.conf 示例配置
查看>>
在办公电脑上设置日志服务器监控思科和华为设备
查看>>
python 字符串替换
查看>>
我的友情链接
查看>>
Linux之常用网络命令
查看>>
linux php 安装 curl
查看>>
思科rip、dhcp、vlan
查看>>
tomcat nginx默许的post大小限制
查看>>
OSI七层模型
查看>>
去除工程的.svn隐藏文件夹
查看>>
Python24 终端如何输出彩色字体
查看>>
XSS跨站脚本***
查看>>
linux 挂载光驱
查看>>
ASP.NET MVC Area操作
查看>>
CSS颜色代码大全
查看>>
LINQ之路10:LINQ to SQL 和 Entity Framework(下)
查看>>