zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    java基本类型和包装类型的区别以及object的公共方法
    Scrapy学习
    centos系统python2.7更新到3.5
    requests和BeautifulSoup模块的使用
    基于角色的权限控制系统(role-based access control)
    Git的使用
    可插拔式后台管理系统(Django)
    Django admin site应用
    【算法】RMQ LCA 讲课杂记
    oh-my-zsh 安装和使用
  • 原文地址:https://www.cnblogs.com/wwssgg/p/15535548.html
Copyright © 2011-2022 走看看