java调用C++代码

2023-11-12

首先我的参考博客如下:

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

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

注意,命令应该是

javah -classpath . -jni com.xx.xx

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

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 <iostream>
#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>

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

6.生成dll文件

在这里生成,结果在项目的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的文件夹即可

8.运行结果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java调用C++代码 的相关文章

随机推荐

  • Springboot整合RestTemplate发送http请求

    据技术选型总结常见的三种方式发送http请求 本文介绍Springboot整合RestTemplate发送http请求方式 其他两种如下链接 java原生发送http请求 程序三两行的博客 CSDN博客 HttpClient和OkHttp发
  • java语言简介

    什么是Java语言 一种面向对象的语言 编写程序的开始就是编写类的开始 class 用于定义类 一种平台无关的语言 必须程序运行的解释环境 真正的运行步骤为 javac编译 java解释执行 一种健壮的语言 吸收了C C 语言的优点 但是去
  • Idea安装配置Maven【简述】

    Maven 是一个管理和构建Java项目的工具 它主要的生命周期 编译 测试 打包 发布 Maven项目可以在不同IDE使用 比如 Idea 和 eclipse 他们自身的项目是不能互通的 然而使用Maven构建的项目可以在这两个不同平台使
  • C++ Primer 学习笔记 第四章 表达式

    表达式由运算对象组成 对表达式求值得到一个结果 字面值和变量是最简单的表达式 其结果就是字面值和变量的值 把一个运算符和一个或多个运算对象组合起来可以生成较复杂的表达式 C 定义了一元运算符 二元运算符和三元运算符 作用于一个运算对象的运算
  • oracle语句中截取字符,Oracle中字符串截取最全方法总结

    substr 函数 截取字符串 语法 SUBSTR string start length string 表示源字符串 即要截取的字符串 start 开始位置 从1开始查找 如果start是负数 则从string字符串末尾开始算起 leng
  • 剑指offer:中等部分

    剑指offer 中等部分 001 求1 2 n 求 1 2 n 要求不能使用乘除法 for while if else switch case等关键字及条件判断语句 A B C 示例 1 输入 n 3 输出 6 示例 2 输入 n 9 输出
  • 晶振与软件的关系(深度理解)

    晶振是电路中非常常见的一个元件 常常被人们称为芯片的心脏 确实如此 没有了晶振 可以说一般情况下芯片就无法工作 可编程器件通常来说就是能够通过编程后来执行的芯片 例如各种单片机等等 通常来说我们称软件即是芯片的灵魂 那么如此 作为一个实体的
  • 篮球比赛JAVA代码_Java编程实现NBA赛事接口调用实例代码

    第一步 找别人提供的接口 比如在这里我选择的是聚合数据提供的接口 第二步 要申请相应的AppKey方可使用 此参数会作为接口的参数调用 第三步 调用别人提供的接口方法 代码如下 package juheapi nba Created by
  • MySQL between and 过滤的边界问题

    当数据库字段中存储的是yyyy MM dd格式 即date类型 用between and查询参数yyyy MM dd格式时 包含头尾 相当于x gt y x lt z 当是yyyy MM dd HH mm ss格式 即datetime类型
  • MySQL的biglog文件操作

    一 查看 1 SQL 1 查看所有binlog文件 mysql gt show binary logs 2 查看binlog内容 mysql gt show binlog events in mysql bin 000001 2 mysql
  • 反向代理神器 Nginx Proxy Manager 群晖Docker部署

    群晖Docker部署 本文将使用 NginxProxyManager 中文版 介绍NginxProxyManager基于群晖Docke的部署方法 并且所有操作均在群晖网页端完成 不需要命令行操作 非常适合新手 GitHub xiaoxinp
  • CCMoveBy和CCMoveTo有什么区别?

    CCMoveBy和CCMoveTo有什么区别 cocos2d里面的CCMoveBy 和CCMoveTo有什么区别 含义不同的地方在那块 那位高人给解释一下 谢谢 insul 2010 09 14 18 52 by是相对于当前位置 to是到该
  • AI for Scinece Cup 邀请函:一等奖5万

    点击阅读原文 也可进入比赛报名页面
  • Three.js快速入门

    Three js快速入门 1 threejs文件包下载和目录简介 下载地址 网盘链接 https pan baidu com s 1 Ix8TiOScypNcQe3BIl5vA pwd rrks 提取码 rrks threejs文件资源目录
  • iTween基础之Value(数值过度)

    一 基础介绍 二 基础属性 原文地址 http blog csdn net dingkun520wy article details 50550527 一 基础介绍 Value有一个函数 ValueTo 返回一个 from 和 to 之间的
  • element table 合计 第一行 固定列

    element table 合计 第一行 在这位大哥这里学来的 但同时我这边的情况是 固定高度 第一列固定 参数多 因此 这个方法不能够完全满足 因此加入以下代码 代码作用 在每次获取到表格数据时进行操作 因为固定列后 第一列滚动到最底部都
  • np.random.randn()、np.random.rand()、np.random.randint()的区别和用法

    1 np random randn 函数 通过本函数可以返回一个或一组服从标准正态分布的随机样本值 语法 np random randn d0 d1 d2 dn 1 当函数括号内没有参数时 则返回一个浮点数 2 当函数括号内有一个参数时 则
  • SpringBoot+AOP实现用户操作日志的记录

    前言 任何一个项目都会有一个用户操作日志 也叫行为日志 的模块 它主要用来记录某个用户做了某个操作 当出现操作失败时 通过日志就可以快速的查找是哪个用户在哪个模块出现了错误 以便于开发人员快速定位问题所在 实现这一功能一般有两种方法 第一种
  • sqlite

    SQLite库包含一个名字叫做sqlite3的命令行 它可以让用户手工输入并执行面向SQLite数据库的SQL命令 本文档提供一个样使用sqlite3的简要说明 开始 启动sqlite3程序 仅仅需要敲入带有SQLite数据库名字的 sql
  • java调用C++代码

    首先我的参考博客如下 https www cnblogs com CLAYJJ p 7725975 html https www cnblogs com xiaocainiao2hao p 5619862 html https www cn