首页 > 代码库 > 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("调用完成")); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。