一个简单需求:用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包的更多相关文章

  1. jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战

    背景及思路: 需求:要做 创建新卡 接口的测试,要求: 1. 不需要每次手动修改请求参数. 方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化 2. 卡号需 ...

  2. PHP通过php-java-bridge调用JAVA的jar包里class类

    正 文:   有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法. 先简单说 ...

  3. Python3.5调用Java的jar包

    声明:这个是在一个博客上看到的,过了俩星期了突然找不到原博客了,如果原来的博主看到,请联系我删除~ 主要是怕自己忘记,所以在此记录: 环境 Python3.5+JDK1.8 安装命令:python3 ...

  4. 使用 jpype 库实现 Python 调用 java 的 jar 包中的功能

    一.what's the JPype JPype 是一个能够让 python 代码方便地调用 Java 代码的工具.在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Py ...

  5. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  6. Java中Jar包调用命令行运行编译

    原文链接:https://www.toutiao.com/i6491877373942694413/ 记事本编写两个简单的类 文件结构目录 启动DOS,进入文件所在目录 进入到class所在文件的目录 ...

  7. 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 ...

  8. (转)java 从jar包中读取资源文件

    (转)java 从jar包中读取资源文件 博客分类: java   源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...

  9. Kettle中调用用户自定义的jar包

    ETL工具断断续续的也接触了 Informatica,Kettle, SSIS,个人感觉Info很强大但是也很贵,而且有着一些神秘感.Kettle 4.0版本以来已经有了User  defined j ...

随机推荐

  1. springboot-线程池简单使用

    最近做项目,关于订单创建时候因为需要调用远程http服务获取数据,然后校验并写入数据库和修改数据库, 导致接口效率低,所以想到实现异步操作的方式解决. 在调用远程接口成功的时候即认为接口处理成功,返回 ...

  2. Java 8 的新特性和改进总览

    这篇文章是对Java 8中即将到来的改进做一个面向开发者的综合性的总结,JDK的这一特性将会在2013年9月份发布. 在写这篇文章的时候,Java 8的开发工作仍然在紧张有序的进行中,语言特新和API ...

  3. [runtime] MAObjCRuntime

    MAObjCRuntime 源码地址:(引入头文件MARTNSObject.h即可,非arc环境下) http://pan.baidu.com/s/1eQ6776U https://github.co ...

  4. Oracle WIHT AS 用法

    1.with table as 相当于建个临时表(用于一个语句中某些中间结果放在临时表空间的SQL语句),Oracle 9i 新增WITH语法,可以将查询中的子查询命名,放到SELECT语句的最前面. ...

  5. Ip和long互转

    // <summary> /// 将127.0.0.1形式的IP地址转换成十进制整数 /// </summary> /// <param name="strIp ...

  6. HTML中显示特殊字符,如尖括号 “<”,">"等等

    这几天,做个网页,之后进行解析,总是出错.最后发现是因为错误的使用了尖括号  “<”,">". 如下面的html代码: <body> 显示:<inpu ...

  7. Faiss学习:一

    在多个GPU上运行Faiss以及性能测试 一.Faiss的基本使用 1.1在CPU上运行 Faiss的所有算法都是围绕index展开的.不管运行搜索还是聚类,首先都要建立一个index. import ...

  8. hdu4848 求到达每一个点总时间最短(sum[d[i]])。

    開始的时候是暴力dfs+剪枝.怎么也不行.后来參考他人思想: 先求出每一个点之间的最短路(这样预处理之后的搜索就能够判重返回了).截肢还是关键:1最优性剪枝(尽量最优:眼下的状态+估计还有的最小时间& ...

  9. Delegate模式

    转载:http://www.cnblogs.com/limlee/archive/2012/06/13/2547367.html 代理模式 顾名思义就是委托别人去做事情. IOS中经常会遇到的两种情况 ...

  10. NYOJ 113 字符串替换(C++STL解法)

    字符串替换 时间限制:3000 ms  |            内存限制:65535 KB 难度:2 描写叙述 编写一个程序实现将字符串中的全部"you"替换成"we& ...