java调用c++的东西(内有转载的内容)

非常好用java调用c++ dll文件demo 非常好用java调用c++ dll文件demo 直接可以用 立即下载

项目需要,要从java里边调用c++写的一个模块,我本想用jni(java native interface)来着,用那个工程的dll文件,用native method 来加载。网上某位达人手把手教程序如下:

package jni;

 

public class CallDll {

       static {

              System.loadLibrary("CallDll");// no suffix,like .dll or .so

       }

       public native int getSquare(int i);

       public static void main(String[] args) {

              CallDll invoker = new CallDll();

              int j = invoker.getSquare(4);

              System.out.println(j);

       }

}

 

1.再用 javah CallDll.java 将上述类变为 .h 文件,内容如下

    /* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class CallDll */

 

#ifndef _Included_CallDll

#define _Included_CallDll

#ifdef __cplusplus

extern "C" {

#endif

 

JNIEXPORT jint JNICALL Java_CallDll_getSquare

  (JNIEnv *, jobject, jint);

 

#ifdef __cplusplus

}

#endif

#endif

 

2.在vc中新建一个dll文件的工程,然后将这个投文件include,据此头文件写dll工程下的cpp文件,内容如下:

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

//

 

 

#include "stdafx.h"

#include "CallDll.h"

#include "jni.h"

#include "jawt_md.h"

#include "jni_md.h"

 

JNIEXPORT jint JNICALL Java_CallDll_getSquare(JNIEnv *env, jobject obj, jint p)

{

int j = p*p;

return j;

}

 

3.按F7进行编译,然后将debug下的CallDll.dll拷到java类目录下,运行java程序即可。

 

本来想用上述的这一套方法的,但是太繁琐了,因为要将一个整个的工程变为dll的东西,而且这个工程里还调用了很多非程序类的外部资源,所以我想到了用另外一个方法:用java调用exe的方法(我可以修改c++程序将其输入输出位置确定,从而不用java和exe之间互相传递参数),网上找到的程序如下(这个版本在网上有很多,被转载的很厉害,呵呵)

 

1.0 用Java调用windows系统的exe文件,比如notepad,calc之类: 
  public class Demo{ 
  public static void main(String args[]){ 
  Runtime rn=Runtime.getRuntime(); 
  Process p=null; 
  
  try{ 
  p=rn.exec(notepad); 
  }catch(Exception e){ 
  System.out.println("Error exec notepad"); 
  } 
  } 
  } 


2.0调用其他的可执行文件,例如:自己制作的exe,或是下载安装的软件 


  public class Demo{ 
  public static void main(String args[]){ 
  Runtime rn=Runtime.getRuntime(); 
  Process p=null; 
  
  try{ 
  p=rn.exec("/"D:/AnyQ/AnyQ.exe/""); 
  }catch(Exception e){ 
  System.out.println("Error exec AnyQ"); 
  } 
  } 
  }
  (文章来源: baike.duba.net)

上面是我搜到的程序,但是运行却看不到任何东西,运行时一闪即停,再搜,有人说是没有输出位置的问题,即那个程序运行了,但是输出终端不是eclipse的控制台,所以看不到,并给出程序如下:

try {

p = rn.exec("test.exe");

BufferedReader bufferedReader = new BufferedReader(

new InputStreamReader(p.getInputStream()));

 

while ((ss = bufferedReader.readLine()) != null)

System.out.println(ss);

} catch (Exception e) {

System.out.println("Error to run the exe");

}

 

其中改动是用一个BufferedReader将输出吸收并输出在eclipse控制台,这样再运行就可以了。呵呵,真是一波三折。谁让你用java调c++呢!

Java高手调用windows本地API、或者是c、c++等语言写的动态链接库源代码 Java调用windows本地API,或者是c、c++等语言写的动态链接库。第一次见识。值得学习。 立即下载

相关推荐

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7992

[Java进阶] 调用C和C++代码利器(JNI)

本文主要介绍了Java调用C和C++代码的利器JNI,主要讲述了它的应用场景,同时给出了一个完整的代码实战案例,也列举了一些关于JNI的最佳实践。最后介绍了基于JNI之上的更高阶工具JNA。

MCC_MCC_MCC的博客 1657

别再手动配IP了!用NI-USRP Configuration Utility快速搞定USRP 2954与LabVIEW连接

本文详细介绍了如何使用NI-USRP Configuration Utility快速配置USRP 2954与LabVIEW的连接,解决传统手动IP配置的繁琐问题。通过图形化工具自动完成设备发现、IP设置和连接验证,大幅提升软件无线电实验效率,特别适合信号收发应用场景。

weixin_27102543的博客 292

java调用c++的几种方式

类似c#调用c++的方式,定义java端的c++代码接口。

daoer_sofu的专栏 3864

AFSim插件开发实战:从环境搭建到功能扩展

本文详细介绍了AFSim插件开发的完整流程,从环境搭建到功能扩展,涵盖了SDK配置、插件创建、核心代码解析、功能扩展实战、调试优化以及高级开发技巧。通过实战案例和实用技巧,帮助开发者快速掌握AFSim插件开发,提升仿真系统的扩展性和灵活性。

weixin_29309475的博客 576

【Unity实战】HybridCLR热更快速集成

本文假设你已经通过UPM导入了HybridCLR、Addressables、il2cpp支持并具有一定的C#基础和Unity编辑器操作能力。

u012587406的博客 4995

在Windows中实现Java本地方法(JNI)

本文为在 32 位 Windows 平台上实现 Java 本地方法提供了实用的示例、步骤和准则。这些示例包括传递和返回常用的数据类型。 本文中的示例使用 Sun Microsystems 公司创建的 Java DevelopmentKit (JDK) 版本 1.1.6 和 Java本地接口 (JNI) 规范。 用 C 语言编写的本地代码是用 MicrosoftVisual C++ 编译器编译生成的

1375

R语言glm函数构建二分类logistic回归模型、epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值

R语言glm函数构建二分类logistic回归模型(family参数为binomial)、使用epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)

statistics+insight+vista+power 1397

从 Java 代码调用 C/C++ (整理自IBM在线教程)

从 Java 程序调用 C 或 C ++ 代码的过程由六个步骤组成。 我们将在下面几页中深入讨论每个步骤,但还是先让我们迅速地浏览一下它们。 编写 Java 代码。我们将从编写 Java 类开始,这些类执行三个任务:声明将要调用的本机方法;装入包含本机代码的共享库;然后调用该本机方法。 编译 Java 代码。在使用 Java 类之前,必须成功地将它们

印俊 的专栏 1945

故障诊断 | CNN-BiGRU-Attention故障诊断

故障诊断 | CNN-BiGRU-Attention故障诊断

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 674

【SigmaStudio】自定义算法组件之源码规范(二)

工作中自定义算法组件一般是dll文件,生成dll文件需要XML文件和DLB文件,记录一下DLB文件代码的编码规范,定义SigmaStudio SHARC算法开发的编码规则,涵盖函数原型、内存管理、接口结构体等关键要求,确保算法模块与SigmaStudio环境兼容

liang_song的博客 1377

java dll_java调用C++ DLL库方法

最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题。经过查找,实现了一个简单的例子。1、第一步,先在Java中新建一个类如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll文件的代码了。然后我们需要dll中实现下面定义的加减乘除方法。2、编译文件,文件名为...

weixin_31787839的博客 311

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341)

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。Drupal在某些情况下,通过文件模块或者子系统上传恶意文件触发XSS漏洞。

qq_51577576的博客 2208

lua调用java java调用lua[转载]

lua调用java java调用lua[转载] 转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/ LuaJavaBridge - Lua 与 Java 互操作的简单解决方案 Table of Contents luaj 主要特征luaj 用法示例luaj 实现原理 查找并调用指定的 Jav

shuizhizhiyin的专栏 1355

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

lua调用java java调用lua[转载]

转载:http://dualface.github.io/blog/2013/01/01/call-java-from-lua/LuaJavaBridge - Lua 与 Java 互操作的简单解决方案 Table of Contents luaj 主要特征 luaj 用法示例 luaj 实现原理 查找并调用指定的 Java 方法 检查调用结果,并从 Java...

ajt1472580369的博客 260

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

关于Borland cpp32.exe 的使用

        Borland的CPP32是预处理工具,可以去处注释,合并文件等,不但可以用在C/C++文件上,还可以用在JAVA文件上,这样就可以在某些时候在JAVA文件里使用C/C++中的#include和#define,比较方便.以下是一个简单的说明,这个东西不容易找,呵呵~~今天发现cpp32.exe产生的程序可避免行号,并且可保留用/*  */标记的注释,

smilelance的移动开发专栏 1612

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VS2010 C++调用Java的Jar包

在网上看了一圈,只有一个示例代码,而且运行有错误,下面给出正确代码: JarAppCall.h 1 #pragma once 2 3 4 class CJarAppCall 5 { 6 public: 7 CJarAppCall(void); 8 ~CJarAppCall(void); 9 ...

aowenger6906的博客 390

图解安卓-c++开发-通过java 调用c++ jni的使用

接着上一节 ,很多事情用java做,效率要差一点(尤其是游戏),所以要用c++来实现,那么java如何调用c++ 首先建议一个工程 HelloJni如下图: 按照默认的配置下一步,直到完成 。 如下图操作,点击windows菜单-》Prefrence菜单: 弹出如下图:选择Andriod ->NDK: 配置完成以后,点击工程属性菜单: 做这一...

weixin_30784501的博客 156

Bjarne Stroustrup关于C++的讲座 (转)

今天Bjarne Stroustrup到公司来做关于C++ 0x泛型编程的讲座。秉着不吃鸡蛋也可以看看母鸡的原则,我还是提前20分钟去前排占了个位子 —— 虽 说我们实验室除了编译器部门和数据库部门狂用C++外,主要还是Java...

cuankuangzhong6373的博客 197

【转载】java中的引用和C++中的指针的区别

1.类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。 2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。 3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,...

113

java调用C++的过程

转自https://blog.youkuaiyun.com/yjhdxflqm/article/details/50503551 jni是java和C、C++通信的桥梁。 java适合写上层的应用,C、C++适合写底层的应用。因为C、C++就是跟底层打交道的。 当然这里并不讨论那么多,只是我要记住这一点,我所以做的工作就是如何使用jni,把留在.java中的本地的接口,让C,C++代码...

weixin_30340353的博客 99

【开源好书学习 C++】【转载】

作者 艾伦·尤斯特(Paul Ezust), 656页本书首先介绍C++基本组成,面向对象的概念,UML(统一建模语言)和核心Qt类。进而转向更高层次的编程思想,Qt模型和设计模式。最后一部分严谨地印证了C++的重要特性,完整地覆盖了函数,继承和多态性方面的内容。该书旨在用于大学课程,面向没有C或C ++编程经验的读者,还为教学工作者提供了Qt示例,练习,解决方案和授课幻灯片。这本书是Bruce Perens开源系列的一部分。

j8267643的博客 978

JNI 最简单的Java调用C/C 代码

JNI 最简单的Java调用C/C 代码

gfjggtf的博客 161

C++与Java比较

“作为一名C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且Java的语法无疑是非常熟悉的。事实上,Java本来就是从C++衍生出来的。”  然而,C++和Java之间仍存在一些显著的差异。可以这样说,这些差异代表着技术的极大进步。一旦我们弄清楚了这些差异,就会理解为什么说Java是一种优秀的程序设计语言。本附录将引导大家认识用于区分Java和C++的一些重要特征。  (1) 最大的障碍...

weixin_30532369的博客 61
上一篇: java编译过程与c/c++编译过程不同
下一篇: An article about the java serialization algorithm
wzbclock
博客等级 码龄19年 69粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值