java调用C++代码

首先我的参考博客如下:

https://www.cnblogs.com/CLAYJJ/p/7725975.html

https://www.cnblogs.com/xiaocainiao2hao/p/5619862.html

https://www.cnblogs.com/langtianya/p/3470896.html

流程如下:

1.建立一个java文件,在这里我只写了一个方法,myadd()。

package com.imgMatch;//包名影响着javah的使用

public class ForDll
{
	static 
	{
		System.loadLibrary("javaCallcpp");//javaCallcpp就是要加载的dll的名字,这是相对路径加载方式
	}

	public native int myadd(int a , int b);//myadd就是要在dll中实现的方法
	
	public static void main(String args[])
	{
		ForDll test = new ForDll();
		System.out.println(test.myadd(5, 6));
	}
}

2.1 命令行里面  javac ForDll.java 生成ForDll.class

java调用C++代码_第1张图片

2.2 继续,javah 生成.h,这是给C++用的。

注意,命令应该是

javah -classpath . -jni com.xx.xx

java调用C++代码_第2张图片

3.打开VS2015,建立一个win32控制台程序,这里选dll

java调用C++代码_第3张图片

4.1 将ForDll.h加入头文件之中

4.2 新建dllApi.h,内容如下:

#include "ForDll.h"

int myadd(int a, int b);

4.3 新建dllApi.cpp,实现上面的函数,内容如下:

#include "stdafx.h"
#include 
#include "dllApi.h"

int myadd(int a, int b)
{
	return (a + b);
}

4.4 写TestJNI.cpp,内容如下:

// TestJNI.cpp : 定义 DLL 应用程序的导出函数。
//

#include "stdafx.h"
#include "dllApi.h"
#include "ForDll.h"


JNIEXPORT jint JNICALL Java_ForDll_myadd(JNIEnv *env, jobject obj, jint a, jint b) {
	return a+b;
}

5.在ForDll.h中有问题:

#include 

会报错,找不到该文件。参考上述的几篇文章,我将 jni.h,jawt_md.h,jni_md.h放在了头文件里和VC\include里面,重启VS就好了。

6.生成dll文件

java调用C++代码_第4张图片

在这里生成,结果在项目的Debug文件里面。如TestJNI\x64\Debug\TestJNI.dll。

要注意的是,如果你的java用的是64位的话,就要去生成64位的dll,不然java那边会报错。

7. 在java项目里面添加dll

选中该项目,右键属性,在java build path里面的Libraries里面,打开JRE System Lib,里面的Native lib location,选择你放dll的文件夹即可

java调用C++代码_第5张图片

8.运行结果如下:

java调用C++代码_第6张图片

你可能感兴趣的:(dll)