Java:使用javah生成.h文件并完成dll调用

Posted 你是小KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:使用javah生成.h文件并完成dll调用相关的知识,希望对你有一定的参考价值。

当前环境:jdk1.8vs2015

1. 声明

当前内容主要为javah的使用,并完成dll打包操作并实现java调用dll文件
主要内容:

  1. 使用javah生成.h文件
  2. 使用vs studio 2015实现.h文件并打包为dll
  3. 使用java方式调用dll

2. 使用javah生成.h文件

javah用于native方法的.h文件生成

1.创建具有native的类

public class JavahTest 
	public void show() 
		System.out.println("11111");
	
	public static native void cHello();

这里提供一个native的cHello方法

2.使用命令行执行javah操作生成.h文件

进入classes文件并执行:javah -classpath . com.hy.java.javah.JavahTest
此时就会生成.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_hy_java_javah_JavahTest */

#ifndef _Included_com_hy_java_javah_JavahTest
#define _Included_com_hy_java_javah_JavahTest
#ifdef __cplusplus
extern "C" 
#endif
/*
 * Class:     com_hy_java_javah_JavahTest
 * Method:    cHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_hy_java_javah_JavahTest_cHello
  (JNIEnv *, jclass);

#ifdef __cplusplus

#endif
#endif

3. 使用vs studio生成对应的dll文件

1.打开vs并创建控制台程序

此时一定要选择DLL,就是为了在生成时生成dll文件


2.将.h文件导入到vs中一定要在文件夹中看到这个文件

正常情况下由于没有导入特定的链接库,所以.h中的文件会报错

3.引入jdk的动态链接库



此时.h文件不会出错了

4.开始实现该方法

#include "com_hy_java_javah_JavahTest.h";
JNIEXPORT void JNICALL Java_com_hy_java_javah_JavahTest_cHello(JNIEnv *env, jclass a) 
	printf("welcome to use dll to print word!");

5.开始生成dll文件(按照不同的机器生成不同位数的dll)


生成成功后的结果

4. 在java中调用该dll文件

直接拷贝该文件到项目的一个地方

开始编写java代码并调用native方法

public class JavahTest 
	public void show() 
		System.out.println("11111");
	
	public static native void cHello();
	public static void main(String[] args) 
		System.load("D:\\\\eclipse-workspace\\\\Java8BasicReStudy\\\\src\\\\com\\\\hy\\\\java\\\\javah\\\\dll\\\\javadll.dll");
		JavahTest.cHello();
	


执行结果:

实现完成

以上是关于Java:使用javah生成.h文件并完成dll调用的主要内容,如果未能解决你的问题,请参考以下文章

JNI调用C语言

eclipse如何开发并调用dll文件

[JNI开发]使用javah命令生成.h的头文件

使用javah来生成.h文件正解

5.7 NDK开发

jenkins 中集成JNI的坑