经过努力……终于搞定了调用java的问题!
一个简单的McVersion类出现,每个McVersion对象就是一个版本,每个版本有自己的版本号以及路径。
文件McVersion.h
#ifndef __MCVERSION_H__
#define __MCVERSION_H__
#include <string>
#include <windows.h>
#include <iostream>
#include <direct.h>
class McVersion
{
private:
char* version;
char* path;
bool usejava; //如果usejava为true则设置环境变量为程序主文件夹下的 jre6\bin 目录
public:
McVersion();
std::string ShowVersion();
void SetValues(char* ver,char* pat,bool jav);
void Runme();
};
#endif
文件McVersion.cpp
#include "McVersion.h"
McVersion::McVersion()
{
version = "1.1";
path = "\\";
usejava = true;
}
std::string McVersion::ShowVersion()
{
std::string show="当前版本:";
show += version;
show += " 当前路径:";
show += path;
show += " ";
return show;
}
void McVersion::SetValues(char* ver,char* pat,bool jav)
{
version = ver;
path = pat;
usejava = jav;
}
void McVersion::Runme()
{
std::string folder = path;
int stat;
if(usejava)
{
stat = _putenv("JAVA_HOME=.\\jre6");
stat = _putenv("PATH=.\\jre6\\bin");
}
std::string run;
run="APPDATA=.\\"+folder;
stat = _putenv(run.c_str());
run="java -jar .\\"+folder;
run+="\\Minecraft.jar";
WinExec(run.c_str(), SW_HIDE);
}
测试主程序
#include "McVersion.h"
using namespace std;
int main(void)
{
McVersion c;
c.SetValues("1.0", "v1.0", 1);
c.Runme();
}
tips:
函数 _putenv() 的旧形式是 putenv() ,用于设置环境变量的值。用法:_putenv("PATH=.\\jre6\\bin"); (感谢 leafallen 对这个问题的贡献,草根英雄1 对此也有帮助http://zhidao.baidu.com/question/379418763.html)
在这里调用java的方式是采用 _putenv 设置环境变量后使用 WinExec 执行 java 并访问 指定目录的 .jar 文件。当然还有更高明的通过CreateProcess函数以及管道,我本着实用至上的原则就没有去查。