2

JNI を使用して Java プログラムを実行する C++ dll があり、その Java プログラムの出力をキャプチャする方法を見つけようとしています。stringstream を使用して stdout をバッファにリダイレクトしようとしましたが、これは dll からの出力のみを取得しているようです。System.out を読み取るにはどうすればよいですか?

これは私が今試していることですが、うまくいきません:

using namespace std;

stringstream buffer;
streambuf * old = cout.rdbuf(buffer.rdbuf());
//run java stuff here

これを行った後buffer.str()、Java メソッドが適切に実行され、それらのメソッドに System.out.println() 呼び出しがあるにもかかわらず、まだ空です。のようなことをするcout << "test" << endl;と、buffer.str() がそのテキストを取得するので、バッファの問題ではないようです。ここでのオプションは何ですか?

4

1 に答える 1

1

バッファを変更coutしても、標準出力ストリームは変更されず、カプセル化に使用されたオブジェクトだけが変更されます。

出力を完全にリダイレクトするには、ファイルまたはパイプにリダイレクトする必要があります。この質問freopen stdoutで詳細を確認できます。

次に、Java コードの完全な出力を取得するには、同じファイル (またはパイプ) を読み取りモードで開き、必要な情報を取得します。

ところで、あなたのコード例では、必要はありませんが、関連するno?stringstreamだけが必要です。stringbuf

于 2013-10-10T14:42:46.230 に答える