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 高级程序设计 三

    Sorry,前两张介绍的主题还是JavaScript,而第一章介绍了JavaScript和ECMAScript区别,所以前两章介绍的主题应该改为ECMAScript,但是 标题就不改了因为现在人们习惯 ...

  2. sql重复数据的过滤问题

    有重复数据主要有一下几种情况: 1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 example: select distinct * from table(表名) ...

  3. 基因组表达分析:如何选择RNA-seq vs. 芯片

    基因组表达分析:如何选择RNA-seq vs. 芯片 发布日期:2017-03-29 10:00 DNA 芯片(上图左侧)由附着在表面的核酸探针组成.首先,从样品中提取 RNA 并转化为互补 DNA( ...

  4. Java 使用jdk自带的wsimport命令生成webservice客户端代码

    wsimport -s E:\workspace\givemewords\src -p com.test.service -keep http://localhost:8085/Service/Fun ...

  5. Eloquent Attach/Detach/Sync Fires Any Event

    eloquent-attach-detach-sync-fires-any-event I have a laravel project, and I need to make some calcul ...

  6. [FreeMind] 绘制思维时遇到的常见问题解决办法

    如何改变节点的摆放方向? 如果是新建节点,选择要放置节点的那一侧,按enter键,或者鼠标右键,插入平行节点即可. 如果是已经建好的节点,可以用ctrl+x, ctrl+v粘贴到另一边,或者选中子节点 ...

  7. Spring IOC(五)依赖注入

    Spring IOC(五)依赖注入 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) 一.autowire 五种注入方式测试 ...

  8. Spring ApplicationContext(五)invokeBeanFactoryPostProcessors

    Spring ApplicationContext(六)BeanPostProcessor 产生回顾一下 ApplicationContext 初始化的几个步骤:第一步是刷新环境变量:第二步是刷新 b ...

  9. 转:Struts2返回JSON数据的具体应用范例

    http://blog.csdn.net/jspamd/article/details/8810109 纠错: <result type="json" name=" ...

  10. Linq去重 不用实现IEqualityComparer接口的方法超级简单

    RskFactorRelation.Instance.GetCache<RskFactorRelation>(true).Where(x => !string.IsNullOrEmp ...