问题描述
我想知道是否可以将C / C ++ dll的STDOUT连接到JTextArea? 问题是,我正在使用第三方DLL,所以我不能手动改变它们。 基本上我有我的Java小程序,然后我自己的DLL加载和管理第三方DLL,它是第三部分DLL,它做像printf()的东西。 它在调试期间显示在Eclipse控制台中,但我希望它在JTextArea或其他东西中。
编辑:澄清一下,我在我的win32 DLL中使用std :: cout。
谢谢
1楼
什么是STDOUT? 如果它是Posix文件句柄,那么你无能为力。 您必须关闭它,然后打开一个临时文件,写入该文件,然后在Java部分中读取它。 如果您实际上使用std :: cout作为输出,则可以(暂时)更改它的streambuf以使用stringbuf,然后将生成的字符串传递给Java。
2楼
您可以在DLL中将stdout重定向到文件或管道。 然后,您可以从Java中读取文件或管道,并将您读取的内容复制到JTextArea。 另一个选择是将您的DLL移动到它自己的进程中,您可以从Java开始,然后从进程的stdout读取并写入您的JTextArea。
SetStdHandle 将允许您重定向stdout。