2014-04-01 49 views
0

我使用JNA从Java调用某些C++方法。一切正常。这个方法包含“cout”来打印一些东西。我的问题是,如果可以将这些打印从C++方法重定向到Java中的JFrame。在Java方法中,这很容易,但我不知道是否可以通过JNA调用方法。好吧,我知道这是一个很奇怪的问题,但我想知道是否有可能。提前致谢。JNA将STDOUT重定向到JFrame

+1

您需要将'cout'流重定向到Java可以读取它的位置。您可以使用带有生产者/使用者指针的循环缓冲区,使用最新数据的Java回调或任何其他用于进程间通信的通用方法。它可能更容易将本地代码中的流重定向到测试中,但没有理由不能将该本地代码翻译成JNA调用。 – technomage

+1

请参阅http://stackoverflow.com/questions/584868/rerouting-stdin-and-stdout-from-c了解重定向'stdout'的一种方法。如果转储到文件,则可以从文件中读取Java。 JNA完全可以称呼'freopen'。 – technomage

+1

您可能需要四处寻找'stdout'的实际值;了解其定义,请查看系统的''文件。在OSX上,它是一个全局符号,名为'__stdout',类型为'FILE *'。在其他系统上,它是全局'FILE'结构数组中元素的地址。 – technomage

回答

1

您需要将cout流重定向到Java可以读取它的位置。您可以使用带有生产者/使用者指针的循环缓冲区,使用最新数据的Java回调或任何其他用于进程间通信的通用方法。它会可能更容易重定向到本机代码流测试,但没有理由不能将该本机代码翻译成JNA调用。

有关重定向stdout的一种方法,请参阅Rerouting stdin and stdout from C。如果转储到文件,则可以从文件中读取Java。 JNA完全有能力致电freemen。您可能需要查看实际值stdout;查看您的系统的<stdio.h>文件的定义。在OSX上,它是一个名为__stdout的全球符号,其类型为FILE*。在其他系统上,它是全局数组结构中元素的地址。