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("调用完成"));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值