Làm cách nào để gửi dữ liệu chuỗi từ Java sang ứng dụng bảng điều khiển C++ trong Windows? Tôi cố gắng để làm điều này:Soạn thảo Ứng dụng giao diện C++ được tạo trong ứng dụng Java Dưới Windows
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
String o = ...;
proc.getOutputStream().write(o.getBytes());
Nhưng tôi không bao giờ nhìn thấy nó trên mặt C++ khi tôi làm điều này:
ReadFile(stdin_h,buf, sizeof(buf), &bytes, 0)
ReadFile
không bao giờ trở lại.
Điều gì sau đây là xây dựng thêm và mã mẫu.
Tôi đã viết một ứng dụng giao diện điều khiển C++ đơn giản (Win32) đọc từ STDIN và thực hiện các tác vụ dựa trên đầu vào.
Bây giờ tôi muốn viết một ứng dụng Java để "điều khiển" ứng dụng C++. Java applicaton nên:
- Khởi động ứng dụng C++ sử dụng
Runtime.exec()
- dữ liệu Viết chuỗi C++ ứng dụng của STDIN
- Lặp lại cho đến khi nó là thời gian để chết.
Ứng dụng Java của tôi có vẻ đang hoạt động, nhưng ứng dụng C++ không bao giờ nhận được bất kỳ dữ liệu nào trên STDIN.
Đây là ứng dụng 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;
}
}
}
Và đây là mặt 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);
}
}
Phía Java dường như được làm việc một cách chính xác, nhưng tôi không bao giờ nhận được chuỗi trên phía C++.
Tôi có làm gì sai ở đây không? Làm thế nào tôi có thể gửi dữ liệu chuỗi từ Java đến một ứng dụng giao diện điều khiển C++ trong Windows?
+1: Uh, vì tôi không đủ thông minh để biết rằng tôi nên làm. :) Chờ một chút, để tôi thử. –
Bingo! Tôi biết chúng ta không được phép nói "cảm ơn", nhưng cảm ơn. Phiên gỡ lỗi 6 giờ của tôi đã kết thúc. –
LOL! : D \ o/Rất vui vì tôi đã giúp bạn ạ :) – t0mm13b