WindowsでJavaからC++コンソールアプリケーションに文字列データを送信するにはどうすればよいですか?私はこれをやろうとしています:
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
String o = ...;
proc.getOutputStream().write(o.getBytes());
しかし、これを行うと、C++側では表示されません。
ReadFile(stdin_h,buf, sizeof(buf), &bytes, 0)
ReadFile
二度と戻らない。
以下は、さらなる詳細とサンプルコードです。
STDINから読み取り、入力に基づいてアクションを実行する単純なC ++コンソール(Win32)アプリケーションを作成しました。
次に、C++アプリケーションを「駆動」するJavaアプリケーションを作成します。Javaアプリケーションは次のことを行う必要があります。
- を使用してC++アプリケーションを起動します
Runtime.exec()
- 文字列データをC++アプリのSTDINに書き込みます
- 死ぬ時まで繰り返します。
私のJavaアプリケーションは機能しているようですが、C++アプリケーションがSTDINでデータを受信することはありません。
C++アプリケーションは次のとおりです。
int main()
{
ofstream f("c:\\temp\\hacks.txt");
HANDLE stdin_h = GetStdHandle(STD_INPUT_HANDLE);
DWORD file_type = GetFileType(stdin_h);
if( file_type != FILE_TYPE_CHAR )
return 42;
f << "Pipe" << endl;
for( bool cont = true; cont; )
{
char buf[64*1024] = {};
DWORD bytes = 0;
if( ReadFile(stdin_h,buf, sizeof(buf), &bytes, 0) )
{
string in(buf,bytes);
cout << "Got " << in.length() << " bytes: '" << in << "'" << endl;
f << "Got " << in.length() << " bytes: '" << in << "'" << endl;
if( in.find('Q') )
cont = false;
}
else
{
cout << "Err " << GetLastError() << " while reading file" << endl;
f << "Err " << GetLastError() << " while reading file" << endl;
}
}
}
そして、これがJava側です。
public static void main(String[] args) {
Runtime rt =Runtime.getRuntime();
try {
Process proc = rt.exec("c:\\dev\\hacks\\x64\\debug\\hacks.exe");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
int a = 0;
while(a < 5)
{
String o = (a == 4 ? "Q\n" : "A\n");
proc.getOutputStream().write(o.getBytes());
System.out.println("Wrote '" + o + "'");
++a;
}
try {
proc.waitFor();
// TODO code application logic here
} catch (InterruptedException ex) {
Logger.getLogger(Java_hacks.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(Java_hacks.class.getName()).log(Level.SEVERE, null, ex);
}
}
Java側は正しく機能しているようですが、C++側で文字列を受信していません。
私はここで何か間違ったことをしていますか?WindowsでJavaからC++コンソールアプリケーションに文字列データを送信するにはどうすればよいですか?