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("调用完毕"));
}
时间: 2024-12-27 10:04:43

C++调用Java的Jar包的相关文章

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

背景及思路: 需求:要做 创建新卡 接口的测试,要求: 1. 不需要每次手动修改请求参数. 方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化 2. 卡号需要唯一: 方案:文中用jmeter的beanshell按时间戳加随机数生成 3. 请求参数中有一个参数,会根据相应的请求参数生成(文中的sign值),接口请求会验证sign是否和相应请求参数对应: 方案: 1. 文中将生成sign的源码打包放在jmeter的lib\ext\ 下, 2. 再用jmet

VS2010 C++调用Java的Jar包

在网上看了一圈,只有一个示例代码,而且运行有错误,下面给出正确代码: JarAppCall.h 1 #pragma once 2 3 4 class CJarAppCall 5 { 6 public: 7 CJarAppCall(void); 8 ~CJarAppCall(void); 9 10 /* 11 @brief 执行Jar包调用,等待执行完成返回 12 @param[in] strJarDir jar包目录 13 @param[in] strJarName jar包名称 14 @ret

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字节码库 3 ASM asm-util-2.2.3.jar Java字节码操纵和分析框架 4 COMMONS commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. 5 COMMONS commons-beanuti

Java常见Jar包的用途

jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法. wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.jar JAF框架的jar包 annotations-a

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

(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java

SoapUI调用自写Jar包

soapui能够使用groovy脚本,脚本中可以调用自己编写的jar包,使用中会遇到一些问题,下面进行一些记录 soapui调用自写jar包 1.编写jar代码并调试测试成功 2.打包jar包 eclipse中鼠标右键到需要打包的项目-Export-Java-JAR file-Next-选中项目下manifest.mf文件和需要打包的方法-指定jar包存储路径和jar包名称-Finish 3.拷贝jar到指定soapui路径 * \SoapUI-Pro-5.1.2\bin\ext\ *为soap

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

ETL工具断断续续的也接触了 Informatica,Kettle, SSIS,个人感觉Info很强大但是也很贵,而且有着一些神秘感.Kettle 4.0版本以来已经有了User  defined java class组件,使用户可以写Java代码 让kettle来调用,这就说明了很多kettle不能处理的东西我们可以通过Java代码来实现,步骤如下: 一:创建Java  Project   二:导出Jar包 在main方法中测试Java Project方法无误后 ,导出为jar包,如下图所示

C#调用java的jar文件的方法(转)

一.将已经编译后的java中Class文件进行打包: Eclipse或myeclipse进行Export选择jar即可.或者使用命令 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . 其中test.jar为要生成的jar包:com/ . 为指定的当前目录下的文件夹,该文件夹包括子文件夹及class文件: cmd->到java class文件目录下->jar  cvf    要生成的jar包名称.jar    java类文件

Delphi XE7的安卓程序如何调用JAVA的JAR,使用JAVA的类?

本文使用工具和全部源码下载: http://download.csdn.net/detail/sunylat/8190765 为什么我们要在Delphi XE7的安卓程序调用Java的JAR,使用JAVA的类?如果能够这样做,那么就意味着我们把Delphi开发的安卓程序扩展到了一个更大的开发范围了,理论上可以调用任意JAVA编写的代码,对于同时精通Delphi和JAVA的程序员来说,简直如虎添翼!! 我差不多用了一天时间吧,最终在老猫的帮助下,成功实现了在Delphi XE7的安卓程序中调用JA