我需要从我的c ++程序中运行这一行:
java -jar test.jar text1 text2
java应用程序将给出一个浮点值并将其提供给c ++程序。
我该怎么做?我从来没有在我的ms visual studio C ++文件中调用java的东西。
答案 0 :(得分:4)
如果您想使用强耦合JNI wrapper。
答案 1 :(得分:0)
一个简单的解决方案是使用popen()和pclose()。
函数popen(),forks()和execs()子进程。但它附加了子流程标准输入和标准输出由popen创建的流对象。因此,将任何内容写入父级中的流将其发送到子进程的标准输入,而子进程写入标准输出的任何内容都可以由父级从流中读取:
double value;
FILE* child = popen("java -jar test.jar text1 text2", "r");
if (fscanf(child, "%f", &value) == 1)
{
fprintf(stdout,"Got Value: %f\n", value);
}
else
{
fprintf(stdout,"ERROR\n");
}
fclose(child);
答案 2 :(得分:0)
当我在命令提示符下直接运行java命令时,它可以工作。但是当我从c ++文件运行命令时,错误显示“系统无法执行指定的程序”。
这是我的代码,即时通讯使用ms visual studio 2005:
#include "stdafx.h"
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
float value;
FILE *child = _popen("java -jar c:\simmetrics_jar_v1_6_2_d07_02_07.jar text1 ssdyr445", "r");
if (fscanf(child, "%f", &value) == 1)
{
fprintf(stdout,"Got Value from simmetrics: %f\n", value);
}
else
{
fprintf(stdout,"ERROR\n");
}
fclose(child);
return 0;
}
答案 3 :(得分:-1)
如果您可以修改您的Java代码,这是最简单的:
将结果写入环境变量(下面的伪代码):
解决方案1。 (直接写入java app中的env。)
的java:
...
setenv('ret', somefloatvalue);
...
exit..
C ++:
system("java -jar test.jar text1 text2")
...
getenv("ret")
(我没有测试过,但这里重要的是上下文,系统是否会创建另一个shell(控制台), 如果是的话,你将看不到那些环境,因此需要一些其他的生成方法)
Windows上的CreateProcess() Linux上的 fork()。
还有更复杂的解决方案,