• C++调用Java的Jar包


    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包 - gavanwanggw - 博客园 (cnblogs.com)

  • 相关阅读:
    jquery ready()的几种实现方法小结
    jQuery之$(document).ready()使用介绍
    jquery的$(document).ready()和onload的加载顺序
    php var_export与var_dump 输出的不同
    PHP获取和操作配置文件php.ini的几个函数
    PHP 网站保存快捷方式的实现代码
    php 图形验证码的3种方法
    面向对象基础01
    提高记忆力
    Python数据分析环境和工具
  • 原文地址:https://www.cnblogs.com/wwssgg/p/15535548.html
Copyright © 2020-2023  润新知