一、简介

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

最新文章

  1. 系统弹性概念[TODO]
  2. t检验
  3. 友盟消息推送和更新XML配置
  4. Centos7 Openstack - (第一节)基本环境配置
  5. NDK(3)java.lang.UnsatisfiedLinkError: Native method not found解决方法
  6. 【风马一族_Android】Button 按钮之记录
  7. 第二百六十一、二天 how can I坚持
  8. c语言main函数的参数argc,argv说明
  9. JPA入门例子(采用JPA的hibernate实现版本) 转
  10. svn小技巧——重定向svn diff
  11. Image File Execution Options(2)
  12. BZOJ 3991: [SDOI2015]寻宝游戏 [虚树 树链的并 set]
  13. WebvirtCloud安装(CentOS7)
  14. Confluence 6 配置边栏
  15. “数学口袋精灵”第二个Sprint计划(第五天)
  16. 什么是DNS服务器
  17. Linux kernel模块管理相关详解
  18. UVA-11925 Generating Permutations (逆向思维)
  19. 视频网站数据MapReduce清洗及Hive数据分析
  20. Centos7编译安装Xen环境(vtpm)

热门文章

  1. Img垂直居中
  2. 记录一次webbrowser无法加载 activex 遇到的问题
  3. redis在spring中的配置及java代码实现
  4. Java 网络编程(三) 创建和使用URL访问网络上的资源
  5. 7.PHP 教程_PHP常量
  6. 运用DIV拖拽实现resize和碰撞检测
  7. IOS 学习笔记(4) 控件 标签(UILabel)的使用方法
  8. JS中的RegExp对象常用属性和方法
  9. MFC模式对话框与非模式对话框 消息处理顺序
  10. 带你一起Piu Piu Piu~