Java调用C++编译的dll

由于项目是基于Java的,但是核心代码库是C++写的,为了调用C++的代码,需要将C++的函数编译成dll的形式提供给Java使用。

一、新建一个Java类DllTest

添加一个native方法ADD

package com.javacplusplus;

public class DllTest {
	public native int ADD(int a, int b);
}

二、生成C++所需的头文件

打开项目目录,在src文件夹同级处打开命令行,可按住shift+鼠标右键,选择“在此处打开命令行窗口”。
在命令行窗口中输入 javac com/javacplusplus/DllTest.java
com/javacplusplus是文件路径,也就是包名,DllTest.java就是java类文件
回车会生成class文件。
继续输入 javah com.javacplusplus.DllTest 生成C++所需的头文件,文件位置在src目录下

三、编译dll

1.在VS中新建Win32项目,设置如下,选择 DLL和导出符号
Java调用C++编译的dll_第1张图片
2.将刚才Java中生成的.h文件拷贝到VS项目文件夹中
3.Java jdk/include安装目录中找到jni.h jdk/include/win32中找到jni_md.h,拷贝到VS项目文件夹中
4.VS中项目上右键->添加->现有项,选择前两步拷贝的三个文件
5.打开com_javacplusplus_DllTest.h 将 include jni.h<>更改为include “jni.h”
6.在JavaCppDll.cpp中实现com_javacplusplus_DllTest.h中定义的方法
代码如下

#include "stdafx.h"
#include "JavaCppDll.h"
#include "com_javacplusplus_DllTest.h"

// 这是导出变量的一个示例
JAVACPPDLL_API int nJavaCppDll=0;

// 这是导出函数的一个示例。
JAVACPPDLL_API int fnJavaCppDll(void)
{
	return 42;
}

// 这是已导出类的构造函数。
// 有关类定义的信息,请参阅 JavaCppDll.h
CJavaCppDll::CJavaCppDll()
{
	return;
}

JNIEXPORT jint JNICALL Java_com_javacplusplus_DllTest_ADD
(JNIEnv *, jobject, jint i, jint j)
{
	return i + j;
}

7.配置生成
Debug改为Release,Win32改成x64,可以打开配置管理器进行配置
这里写图片描述

Java调用C++编译的dll_第2张图片
Java调用C++编译的dll_第3张图片
8.生成dll,在项目文件/x64/release下即可找到生成的dll文件

四、Java中调用##

将生成的dll文件放到Java项目根目录下
这里写图片描述
修改DllTest类代码

package com.javacplusplus;

public class DllTest {
	static {
		System.loadLibrary("JavaCppDll");
	}

	public native int ADD(int a, int b);

	public static void main(String[] args) {
		DllTest dllTest = new DllTest();
		int add = dllTest.ADD(1, 2);
		System.out.println(add);
	}
}

static代码块就是加载C++生成的dll,运行即可看到结果。

你可能感兴趣的:(Java)