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)

  • 相关阅读:
    C++11:02decltype关键字
    git 源操作,分支操作
    git操作命令以及优点
    drf--序列化组件
    项目相关 --知识点
    vue框架:
    drf --解析器,异常模块,响应模块 序列化组件
    drf框架相关
    中间键 csrf跨站请求伪造 装饰器相关 auth模块
    多对多表的创建方式 forms组件 session与cookie
  • 原文地址:https://www.cnblogs.com/wwssgg/p/15535548.html
Copyright © 2011-2022 走看看