C++调用Java的Jar包
一个简单需求:用C++调用Jar包。
实现基本思路:调用CreateProcess API来启动cmd.exe执行jar包。
调用类CJarAppCall。
JarAppCall.h
#pragma once class CJarAppCall
{
public:
CJarAppCall(void);
~CJarAppCall(void); /*
@brief 运行Jar包调用,等待运行完毕返回
@param[in] strJarDir jar包文件夹
@param[in] strJarName jar包名称
@return 运行是否成功
*/
bool Run(const CString& strJarDir, const CString& strJarName); private:
bool CallApp(const CString& strJarName);
};
JarAppCall.cpp
#include "StdAfx.h"
#include "JarAppCall.h" CJarAppCall::CJarAppCall(void)
{
} CJarAppCall::~CJarAppCall(void)
{
} bool CJarAppCall::Run(const CString& strJarDir, const CString& strJarName)
{
//缓存当前文件夹
WCHAR sOldDir[MAX_PATH] = {0};
GetCurrentDirectory(MAX_PATH, sOldDir); //设置当前文件夹为jar包文件夹
SetCurrentDirectory(strJarDir);
bool bCalRest = CallApp(strJarName);
//还原当前文件夹
SetCurrentDirectory(sOldDir); return bCalRest;
} bool CJarAppCall::CallApp(const CString& strJarName)
{
WCHAR sSysDir[MAX_PATH] = {0};
GetSystemDirectory(sSysDir, MAX_PATH);
CString strFullPath = sSysDir;
strFullPath += _T("\\cmd.exe");
CString strCmdLine = _T(" /C ");
strCmdLine += _T("java -jar ");
strCmdLine += strJarName; STARTUPINFO si = {sizeof(si)};
PROCESS_INFORMATION pi;
BOOL bRunProgram = CreateProcess(strFullPath.GetBuffer(),
strCmdLine.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); strFullPath.ReleaseBuffer();
strCmdLine.ReleaseBuffer(); if (!bRunProgram)
{
return false;
} // 等待程序结束
WaitForSingleObject(pi.hProcess,INFINITE);
CloseHandle(pi.hProcess); return true;
}
调用演示样例
{
CString strJarDir = _T("F:\\JarRunTest");
CString strJarName = _T("run.jar"); CJarAppCall jarCall;
if (!jarCall.Run(strJarDir, strJarName))
{
//启动失败
AfxMessageBox(_T("启动失败"));
return;
}
AfxMessageBox(_T("调用完毕"));
}
C++调用Java的Jar包的更多相关文章
- jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战
背景及思路: 需求:要做 创建新卡 接口的测试,要求: 1. 不需要每次手动修改请求参数. 方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化 2. 卡号需 ...
- PHP通过php-java-bridge调用JAVA的jar包里class类
正 文: 有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法. 先简单说 ...
- Python3.5调用Java的jar包
声明:这个是在一个博客上看到的,过了俩星期了突然找不到原博客了,如果原来的博主看到,请联系我删除~ 主要是怕自己忘记,所以在此记录: 环境 Python3.5+JDK1.8 安装命令:python3 ...
- 使用 jpype 库实现 Python 调用 java 的 jar 包中的功能
一.what's the JPype JPype 是一个能够让 python 代码方便地调用 Java 代码的工具.在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Py ...
- 分享:根据webservice WSDL地址自动生成java调用代码及JAR包
分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...
- Java中Jar包调用命令行运行编译
原文链接:https://www.toutiao.com/i6491877373942694413/ 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 进入到class所在文件的目录 ...
- Java常用jar包用途
Java常用jar包用途: USAGE INDEX JAR NAME USAGE 1 ASM asm-2.2.3.jar ASM字节码库 2 ASM asm-commons-2.2.3.jar ASM ...
- (转)java 从jar包中读取资源文件
(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...
- Kettle中调用用户自定义的jar包
ETL工具断断续续的也接触了 Informatica,Kettle, SSIS,个人感觉Info很强大但是也很贵,而且有着一些神秘感.Kettle 4.0版本以来已经有了User defined j ...
随机推荐
- 使用sun.misc.BASE64Decoder出错解决方案
Access restriction: The type BASE64Decoder is not accessible due to restriction on required library ...
- 计算均值mean的MapReduce程序Computing mean with MapReduce
In this post we'll see how to compute the mean of the max temperatures of every month for the city o ...
- 第五章 类加载器ClassLoader源码解析
说明:了解ClassLoader前,先了解 第四章 类加载机制 1.ClassLoader作用 类加载流程的"加载"阶段是由类加载器完成的. 2.类加载器结构 结构:Bootstr ...
- Gradle for Android 翻译 -1
英文版电子书下载 参考:Gradle for Android 一.从 Gradle 和 AS 开始 [Getting Started with Gradle and Android Studio] ...
- :Windows下RabbitMQ安装及入门
1.Windows下安装RabbitMQ需要以下几个步骤 (1):下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang. ...
- python 抓取alexa数据
要抓取http://www.alexa.cn/rank/baidu.com网站的排名信息:例如抓取以下信息: 需要微信扫描登录 因为这个网站抓取数据是收费,所以就利用网站提供API服务获取json信息 ...
- 为什么空格拷贝到linux 会变成两个
为什么空格拷贝到linux 会变成两个 学习了:https://zhidao.baidu.com/question/266438357.html 在vi界面内输入:set paste 然后进行拷贝: ...
- Python编程-Office操作-操作Excel(中)
例子文件如下: 一些复杂的读取操作getCells.py import openpyxl wb = openpyxl.load_workbook('example.xlsx') sheet = wb. ...
- Java高并发syncronized深入理解
1.Synchronized的作用: 能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果. 2.地位: 1)Synchronized是java的关键字,并java的怨言原生支持: ...
- 微信小程序 - promise(get\post)
部分源码来自于http://www.wxapp-union.com/home.php?mod=space&uid=17761,就是小程序社区 , 参考以及借鉴一些类似cnblog,csdn上的 ...