java 调用c++程序实例
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++程序实例的更多相关文章
- java调用python程序以及向python程序传递参数
在做项目的时候,经常会碰到这个问题,主要程序是用java写的,有些功能使用python写的,整个项目需要把java代码和python代码进行整合,在一个项目里面运行,这就涉及到java调用python ...
- Java调用Python程序
最近,需要在应用中,需要使用Java程序去调用Python代码,主要有两种实现方式. 一.使用Jython架包 因为调用的Python代码中需要使用Json对象,开始使用jython2.5.2,发现不 ...
- Java调用Kotlin程序深度解析
异常: 在之前我们已经学习在Kotlin中的所有异常都是运行期的,而不像Java分为运行期和非运行期,下面用代码来演示一下,先建一个Java的异常: 然后在Kotlin中来调用一下该Java中的方法 ...
- JAVA调用oracle存储过程实例
1.创建添加存储过程 CREATEORREPLACEPROCEDURE stu_proc(v_id INNUMBER, v_name INVARCHAR2, v_age INNUMBER) AS BE ...
- Runtime.getRuntime().exec()实现Java调用python程序
使用Runtime.getRuntime().exec()来实现Java调用python,调用代码如下所示: import java.io.BufferedReader; import java.io ...
- JAVA 调用exe程序执行对应的文件 (个人用于编译Java文件)
需求: 需要利用Java程序,来调用计算机本身的黑窗口,来将特定的Java文件编译成对应的字节码文件. 实现思路: 通过调用Java的Runtime类,每个 Java 应用程序都有一个 Runtime ...
- eclipse调试java调用matlab程序的7.17dll找不到的问题
经过多次查找,这个问题本来很简单,在环境变量中CLASSPATH配置C:\MATLAB\R2012a\toolbox\javabuilder\jar\win64\javabuilder.jar 特别注 ...
- java调用c库实例
java由于语言限制,不能使用char*作为返回值. 局部变量的字符串不能正常返回,vc可以正常接收,java不能接收. c语言 int __stdcall GetCharacterCodeJn(ch ...
- Java调用IDL方法总结
Java调用IDL方法总结 Java调用IDL程序,需要先在java中加载IDL的java包(javaidlb.jar),该包不需要下载,在IDL的安装目录中可以直接找到(C:\Program Fil ...
随机推荐
- SQL Server 2008数据库连接错误
以Windows身份连接SQL Server 2008数据库时,连接不上,出现如下报错画面: 解决办法:打开services窗口,找到名字类似于SQL Server (xxx)的服务,启动服务. 注: ...
- RPDU
RPDU(Remote Power Distribution Unit) 又称网络电源控制系统.远程电源管理系统.智能PDU.智能电源分配系统,是由傲视恒安科技(北京)有限公司自主研发生产并在全国范围 ...
- java 检查异常 和 非检查异常
个人见解 ,如果有问题 ,还希望大神们 指正 1. 非检查异常 又称运行时 异常 ,所有 继承自 RuntimeException 的异常都是 非检查异常 ,, 如果你不处理 会有 虚拟机 mai ...
- SpringBoot获取resource下证书失败
1.第一种失败的情况: 本来使用Spring的上下文容器获取文件,将证书文件放在resource下,编译后获取文件会出现报错 java.security.spec.InvalidKeySpecE ...
- SpringBoot定制修改Servlet容器
1.如何修改Servlet容器的相关配置: 第一种:在application.properties中修改和server有关的配置(ServerProperties提供): server.port=80 ...
- HTML 内 meta标签
<!-- 是否删除默认的苹果工具栏和菜单栏 --> <meta name="apple-mobile-web-app-capable" content=" ...
- 2018.12.22 spoj7258 Lexicographical Substring Search(后缀自动机)
传送门 samsamsam基础题. 题意简述:给出一个串,询问第kkk大的本质不同的串. 然而这就是弦论的简化版. 我们把samsamsam建出来然后贪心选择就行了. 代码: #include< ...
- https网站引用http路径的js和css失效解决办法
Jazzy html 2015-03-26 在https的网站中引用http路径的js或css会导致不起作用,其形如: Html <script src="http://code. ...
- react native的注释
在react native 中是这样写注释的: {/*这里是注释*/}
- PARSEC安环境配置、运行
1.getting started 2.run PARSEC on simulators Full-System Simulators: such as Simics, GEM5.Trace-Driv ...