1.java程序:

package com.zhangshitong;

import java.io.File;

public class Java2cpp {

    static{
System.load("F:" + File.separator + "JavaCallcpp.dll");
} public native int DLL_ADD(int a, int b); //add method public static void main(String[] args) {
int sum =0;
Java2cpp test = new Java2cpp();
sum = test.DLL_ADD(45, 2);
System.out.println("the result is: "+ sum);
}
}

2. 找到java程序的.class文件,笔者用的是eclipse,所以找到项目的bin目录 cmd下使用  javah -classpath . -jni com.zhangshitong.Java2cpp

或生成com_zhangshitong_Java2cpp.h文件

3.以下步骤就是生成dll文件了,笔者用的visual studio 2008

需要注意的是需要安装64位的编译器,操作步骤详见:https://jingyan.baidu.com/article/a501d80c1aa5a4ec630f5eb6.html

导入相关.h头文件:  1)com_zhangshitong_Java2cpp.h;  2)jni.h和jni_md.h问jdk中的头文件,在JDK_HOME\include 和DK_HOME\include\win32中  拷贝到工程的头文件夹中,拷贝完之后,还需要引入

4.  com_zhangshitong_Java2cpp.h文件 中的改为本地引用  com_zhangshitong_Java2cpp.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_zhangshitong_Java2cpp */ #ifndef _Included_com_zhangshitong_Java2cpp
#define _Included_com_zhangshitong_Java2cpp
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_zhangshitong_Java2cpp
* Method: DLL_ADD
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_zhangshitong_Java2cpp_DLL_1ADD
(JNIEnv *, jobject, jint, jint); #ifdef __cplusplus
}
#endif
#endif

相应的cpp文件:

// JavaCallcpp.cpp : 定义 DLL 应用程序的导出函数。
// #include "stdafx.h"
#include <iostream>
#include "com_zhangshitong_Java2cpp.h"
using namespace std;
JNIEXPORT jint JNICALL Java_com_zhangshitong_Java2cpp_DLL_1ADD(JNIEnv *, jobject, jint a ,jint b)
{
return a+b;
}

5.生成dll文件时 需用release模式,笔者再用debug模式的时候报错

6.生成dll,然后把生成的dll拷贝到指定的目录,java程序在该位置调用即可

相应的c++项目的目录结构是:

红色框中的都是vs2008自动生成的

java 调用c++程序实例的更多相关文章

  1. java调用python程序以及向python程序传递参数

    在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...

  2. Java调用Python程序

    最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式. 一.使用Jython架包 因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不 ...

  3. Java调用Kotlin程序深度解析

    异常: 在之前我们已经学习在Kotlin中的所有异常都是运行期的,而不像Java分为运行期和非运行期,下面用代码来演示一下,先建一个Java的异常: 然后在Kotlin中来调用一下该Java中的方法 ...

  4. JAVA调用oracle存储过程实例

    1.创建添加存储过程 CREATEORREPLACEPROCEDURE stu_proc(v_id INNUMBER, v_name INVARCHAR2, v_age INNUMBER) AS BE ...

  5. Runtime.getRuntime().exec()实现Java调用python程序

    使用Runtime.getRuntime().exec()来实现Java调用python,调用代码如下所示: import java.io.BufferedReader; import java.io ...

  6. JAVA 调用exe程序执行对应的文件 (个人用于编译Java文件)

    需求: 需要利用Java程序,来调用计算机本身的黑窗口,来将特定的Java文件编译成对应的字节码文件. 实现思路: 通过调用Java的Runtime类,每个 Java 应用程序都有一个 Runtime ...

  7. eclipse调试java调用matlab程序的7.17dll找不到的问题

    经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...

  8. java调用c库实例

    java由于语言限制,不能使用char*作为返回值. 局部变量的字符串不能正常返回,vc可以正常接收,java不能接收. c语言 int __stdcall GetCharacterCodeJn(ch ...

  9. Java调用IDL方法总结

    Java调用IDL方法总结 Java调用IDL程序,需要先在java中加载IDL的java包(javaidlb.jar),该包不需要下载,在IDL的安装目录中可以直接找到(C:\Program Fil ...

随机推荐

  1. javascript 高级程序设计 十

    理解JS对象(2)创建对象   JS中创建对象的方式有很多,我们把他们统称为模式. 工厂模式: 优点:解决了创建多个相似对象的问题. 缺点:没有解决对象识别问题.(不知道一个实例对象的类型) func ...

  2. python入门科普IDE工具和编译环境

            应友人之邀,今天来讲述python的一些入门内容.本次讲解的并不是语法或者某个模块.                  python下载安装 大多数 Linux 发行版在默认安装的情况 ...

  3. Spring IOC(一)体系结构

    Spring IOC(一)体系结构 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) BeanFactory 是Spring ...

  4. Python之路(第三篇):Python基本数据类型字符串(二)

    一.基本数据类型1.字符串 str字符串方法介绍(二)a --expandtabs( ) expandtabs( ) 把字符串中的 tab 符号('\t')转为空格参数默认为8,注意字符串原有的空格也 ...

  5. 句子相似度_tf/idf

    import mathfrom math import isnanimport pandas as pd#结巴分词,切开之后,有分隔符def jieba_function(sent): import ...

  6. 全面了解HTTP请求方法说明

    超文本传输协议(HTTP, HyperText Transfer Protocol)是一种无状态的协议,它位于OSI七层模型的传输层.HTTP客户端会根据需要构建合适的HTTP请求方法,而HTTP服务 ...

  7. springMVC学习二 原始springMVC环境搭建

    第一步:导入jar包 第二步:配置DispatcherServlet DispatcherServlet本质是一个Servlet,在spring-webmvc包中,在servlet2.5之前  spr ...

  8. CentOS下利用mysqlbinlog恢复MySQL数据库

    如果不小心对数据库进行误操作,而又没有及时备份怎么办?这恐怕是广大的coder经常遇到的一类问题.我今天就因为不小心删除了某个数据库,但最后的备份是1个礼拜前的,唯一能解决的办法就是通过mysqlbi ...

  9. nginx反向代理缓存服务器的构建

    一:代理服务可简单的分为正向代理和反向代理: 正向代理:用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送 ...

  10. High-radix routers

    The idea is to reduce H (hops), by adding explicit links between physically distant routers, thus re ...