Tôi có quyền truy cập vào thư viện của bên thứ ba có "nội dung hay". Nó phát hành thông báo trạng thái và tiến trình để xuất dữ liệu. Trong ứng dụng Console, tôi có thể thấy các thông báo này tốt. Trong một ứng dụng Windows, họ chỉ cần vào nhóm bit.Làm cách nào để chuyển hướng stdout sang một số màn hình hiển thị có thể nhìn thấy trong Ứng dụng Windows?
Có cách khá đơn giản để chuyển hướng stdout và stderr sang điều khiển văn bản hoặc địa điểm hiển thị khác không. Lý tưởng nhất, điều này sẽ không yêu cầu bất kỳ biên dịch lại mã của bên thứ ba. Nó sẽ chỉ chặn hơi nước ở mức thấp. Tôi muốn một giải pháp mà tôi chỉ #include tiêu đề, gọi hàm khởi tạo và liên kết các thư viện như trong ...
#include "redirectStdFiles.h"
void function(args...)
{
TextControl* text = new TextControl(args...);
initializeRedirectLibrary(text, ...);
printf("Message that will show up in the TextControl\n");
std::cout << "Another message that also shows up in TextControl\n";
}
Thậm chí tốt hơn sẽ là nếu nó được sử dụng một số giao diện mà tôi có thể ghi đè lên nên nó là không gắn với bất kỳ thư viện GUI cụ thể nào.
class StdFilesRedirector
{
public:
writeStdout(std::string const& message) = 0;
writeStderr(std::string const& errorMessage) = 0;
readStdin(std::string &putReadStringHere) = 0;
};
Tôi chỉ mơ? Hay có ai biết điều gì đó có thể làm điều gì đó như thế này không?
Chỉnh sửa sau hai câu trả lời: Tôi nghĩ việc sử dụng freopen để chuyển hướng tệp là một bước đầu tiên tốt. Đối với một giải pháp hoàn chỉnh, sẽ cần phải tạo một chuỗi mới để đọc tệp và hiển thị đầu ra. Để gỡ lỗi, làm một 'đuôi -f' trong một cửa sổ vỏ Cygwin sẽ là đủ. Đối với một ứng dụng được đánh bóng hơn ... Đó là những gì tôi muốn viết ... sẽ có thêm một số công việc để tạo chủ đề, v.v.
'AllocConsole' là phần còn thiếu. Nó tạo ra cửa sổ giao diện quen thuộc. Các chức năng đọc và ghi là khó xử, nhưng bạn có thể chuyển hướng stdout/stdin đến/từ nó khá dễ dàng bằng cách sử dụng phương pháp này: https://stackoverflow.com/a/15547699/133836 –