一个简单需求:用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. SSL协议具体解释

    背景介绍    近期在看<password学与网络安全>相关的书籍,这篇文章主要具体介绍一下著名的网络安全协议SSL. 在開始SSl介绍之前,先给大家介绍几个password学的概念和相关 ...

  2. 简明python教程 --C++程序员的视角(三):模块

    模块和包 1 python程序由包(package).模块(module)和函数组成.包是由一系列模块组成的集合.模块是处理某一类问题的函数和类的集合.函数是一段可以重复多次调用的代码. 2 pyth ...

  3. 编译打包工具sbt的镜像设置

    sbt可以和maven共用一个镜像,公司内部有的自然最后不过 创建文件:~/.sbt/repositories [repositories] local aliyun: http://maven.al ...

  4. 分布式缓存系统Memcached在Asp.net下的应用

    Memcached 是一个高性能的分布式内存对象缓存系统.用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来降低读取数据库的次数,从而提高动态.数据库驱动站点的速度. Memcache ...

  5. 怎样通过terminal得到AWS EC2 instance的ip

    可得到private ip,也是本地的ip.事实上通过ifconfig也能得到: GET http://169.254.169.254/latest/meta-data/local-ipv4 公共ip ...

  6. nth-digit

    https://leetcode.com/problems/nth-digit/ public class Solution { public int findNthDigit(int n) { in ...

  7. C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比

    using System; using System.Runtime.InteropServices; using System.IO; namespace tx { struct ST { publ ...

  8. Swap Nodes in Pairs leetcode java

    题目: Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1-> ...

  9. 关于opacity的思考

    今天在封装图片轮播的插件的时候,产生了这个opacity的小小思考. 我这个轮播的思路不是以前baidu输入法官网的设置外层容器overflow为hidden,position为relative用se ...

  10. idea 创建 简单的scala maven项目

    1.创建maven scala项目 2.maven配置 <properties> <scala.version>2.11.8</scala.version> < ...