Java 如何从C++; 我需要从我的C++程序中运行这条线:
java-jartest.jartext1 text2 java应用程序将给出一个浮点值并将其赋值给C++程序。Java 如何从C++; 我需要从我的C++程序中运行这条线:,java,c++,jar,Java,C++,Jar,java-jartest.jartext1 text2 java应用程序将给出一个浮点值并将其赋值给C++程序。 我该怎么做?我从不从我的MS VisualStudioC++文件中调用java的东西。 如果需要强耦合,请使用。如果可以修改java代码,最简单的方法是: 将结果写入环境变量(下面的伪代码): 解决方案1。 (直接写入java应用程序中的env.) 爪哇: c++: (我没有测试它,但这里重要的是上下文,系统是否创建了另一个shell(控制台), 如果是,您将看不到这些环境,因此需
我该怎么做?我从不从我的MS VisualStudioC++文件中调用java的东西。 如果需要强耦合,请使用。如果可以修改java代码,最简单的方法是: 将结果写入环境变量(下面的伪代码): 解决方案1。 (直接写入java应用程序中的env.) 爪哇: c++: (我没有测试它,但这里重要的是上下文,系统是否创建了另一个shell(控制台), 如果是,您将看不到这些环境,因此需要其他一些spawn方法) CreateProcess()在windows上 fork()在linux上 还有更复杂的解决方案
- 通过插座发送一些JASON的。。。。等等
- 在java中写入文本文件,读入 C++,
- MPI
- 在这种情况下是极端的(CORBA;)李>
- 一个简单的解决方案是使用popen()和pclose()
函数popen()、forks()和execs()是子进程。但它将子进程标准插入和标准输出附加到popen创建的流对象中。因此,将任何内容写入父进程中的流会将其发送到子进程的标准in,而子进程写入标准out的任何内容都可以由父进程从流中读取:
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);
当我直接在命令提示符下运行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; }
这不起作用。当系统旋转时,它为应用程序创建自己的环境(C++ C++环境的拷贝)。当Java应用程序修改环境时,它正在修改自己的环境(而不是其父环境)。因此,家长永远不会看到这些问题。你为什么不接受任何问题的答案?我不知道我需要接受答案。顺便问一下,如何接受?看起来他“接受”了自己的“答案”,这是另一个问题>。我尝试了代码,但仍然不起作用。它不知何故没有从jar应用程序传递浮点值#包括#包括使用名称空间标准;int main(){float value;FILE*child=popen(“java-jar simmetrics_jar_v1_6_2_d07_02_07.jar text1 aab676788”,“r”);fscanf(child,”%f“,&value);fprintf(stdout,“从simmetrics获得的值:%f\n”,value);fclose(child);返回0;}您检查了popen的结果吗?如果它无法启动JavaVM或无法找到jar文件,那么它将生成一个错误。#包括“stdafx.h” #包括 int _tmain(int argc,_TCHAR*argv[] { 浮动值; 文件*child=\u popen(“java-jarc:\simmetrics\u jar\u v1\u 6\u 2\u d07\u 02\u 07.jar text1 ssdyr445”,“r”); if(fscanf(子项、%f、&value)==1) { fprintf(stdout,“从simmetrics获取值:%f\n”,值); } 其他的 { fprintf(标准输出,“错误\n”); } fclose(儿童); 返回0; }
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);
#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; }