一个简单需求:用C++调用Jar包。
实现基本思路:迟高调用CreateProcess API来启动cmd.exe运行jar包。
调用类CJarAppCall。
JarAppCall.h
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
#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
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
#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
}
调用示例
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
{
CString strJarDir = _T("F:\\JarRunTest")
CString strJarName = _T("run.jar")
CJarAppCall jarCall
if (!jarCall.Run(strJarDir, strJarName))
{
//启动失败
AfxMessageBox(_T("启动失败"))
return
}
AfxMessageBox(_T("调用完成"))
}
ShellExecute(this->m_hWnd,"open","C:\\Client.jar","javaw.exe -Xmx128m -jar Client.jar -RSystemAdmin"缺槐慧弊,""伏碧友,SW_SHOW)如果命令行备激可以解决的问题,都不算问纤冲题。比如你可以在c语言中调用system("java -jar xxx.jar")
当然,这种方法毁滚歼很坑爹。需要用文件或者网络来实现数据的传输和交换的介质。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)