zoukankan      html  css  js  c++  java
  • 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("调用完毕"));
    }
    

  • 相关阅读:
    数组排序去重
    js打印页面添加分页
    使用navicate可视化工具连接mysql数据库错误
    php_smarty模板引擎与.NET_VTemplate模板引擎对比
    JoshChen判断是否微信内置浏览器访问【转载】
    JoshChen毕业设计分享之班级网站-ASP.NET
    JoshChen防止前台恶意修改数据
    JoshChen安卓开发学习,从零开始(2)
    JoshChen安卓开发学习,从零开始(1)
    JoshChen模式笔记之php单例模式
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6715686.html
Copyright © 2011-2022 走看看