2010-04-06 65 views
2

我需要從我的C運行這行++程序的java:如何調用從C++

Java的罐子Test.jar的文本1文本2

的Java應用程序會給出一個浮點值,並把它交給C++程序。

我該怎麼做?我從來沒有從我的ms visual studio C++文件中調用java的東西。

+0

爲什麼你不接受您的任何問題的答案? – Shaihi 2010-04-06 10:11:34

+0

我不知道我需要接受答案。順便說一下,如何接受? – karikari 2010-04-06 11:59:06

+0

看起來像他「接受」了他自己的「答案」,這是另一個問題>。< – Kayvar 2013-03-21 21:44:43

回答

0

當我直接在我的命令提示符下運行java命令,它工作。但是當我從C++文件運行命令時,錯誤顯示「系統無法執行指定的程序」。

這裏是我的代碼,使用MS IM 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; 
} 
-1

最簡單的,如果你可以修改你的Java代碼:

結果寫入到環境變量(僞下面的代碼):(。在Java應用程序直接寫ENV)

解決方案1.

的java:

... 
setenv('ret', somefloatvalue); 
... 

exit.. 

C++:

system("java -jar test.jar text1 text2") 
... 
getenv("ret") 

(我還沒有測試,但這裏重要的是背景下,的確系統創建另一個shell(控制檯), 如果是,你不會看到這些ENVS,因此其他一些產卵方法是必要的)

CreateProcess() on windows fork()在linux上。

也有更復雜的解決方案,

  • 發送一些JASON的通過插座....等
  • 寫在Java中的文本文件,在 C++讀取。
  • MPI ...
  • 極端在這種情況下CORBA)
+0

我真的不認爲''set'是如何工作的。 – Blindy 2010-04-06 08:56:37

+0

沒有測試過,你說得對,更正了,謝謝。 – bua 2010-04-06 09:08:50

+0

這不行。當系統加速時,它創建自己的應用程序運行環境(C++父母環境的副本)。當Java應用程序修改環境時,它正在修改它自己的環境(而不是它的父母)。因此,父母將永遠不會看到chnage。 – 2010-04-06 09:59:00

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); 
+0

我試過了代碼,但仍然無法使用。它以某種方式不傳遞來自jar應用程序的float值。 的#include 的#include 使用命名空間std; 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); (stdout,「從simmetrics得到的值:%f \ n」,value); fclose(child); return 0; } – karikari 2010-04-07 00:49:48

+0

您是否檢查popen的結果?如果它無法啓動Java虛擬機或無法找到該jar文件,則會產生錯誤。 – 2010-04-07 15:33:06