Java 如何从C++; 我需要从我的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(控制台), 如果是,您将看不到这些环境,因此需

java-jartest.jartext1 text2

java应用程序将给出一个浮点值并将其赋值给C++程序。
我该怎么做?我从不从我的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;
      }
      
      #包括“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;
      }
      
      这不起作用。当系统旋转时,它为应用程序创建自己的环境(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文件,那么它将生成一个错误。
      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;
      }