Java 读取C++;使用JNA的动态链接库

Java 读取C++;使用JNA的动态链接库,java,c++,dll,stdout,jna,Java,C++,Dll,Stdout,Jna,我对以下“系统”有一个定义: C++DLL->C DLL->Java with JNA C++ DLL是第三方DLL,我想用JNA使用java。但是JNA的工作性能优于C++,所以我做了一个C包装器,加载C++的DLL(使用Load Labor),然后在java中用JNA加载C DLL,并访问C包装器导出的函数。 我想在java中使用C++的DLL可能会有更好的设计,但是这不是我的观点,它似乎起作用。 我的问题是,C++ DLL在STDUT和STDRR上写入,但是C++的DLL写的消息不显示在

我对以下“系统”有一个定义:

C++DLL->C DLL->Java with JNA

C++ DLL是第三方DLL,我想用JNA使用java。但是JNA的工作性能优于C++,所以我做了一个C包装器,加载C++的DLL(使用Load Labor),然后在java中用JNA加载C DLL,并访问C包装器导出的函数。

我想在java中使用C++的DLL可能会有更好的设计,但是这不是我的观点,它似乎起作用。 我的问题是,C++ DLL在STDUT和STDRR上写入,但是C++的DLL写的消息不显示在java控制台中,尽管C包装器写的消息被显示出来。从java?/p>中读取C++ DLL的输出的解决方案是什么?

至今我尝试在C++中编写一个“测试包装器”,它直接使用Load库加载C++ DLL并使用其功能,然后正确显示C++ DLL的输出。 然后我尝试调用freopen()将stdout重定向到C包装器中的一个文件。当使用“测试包装器”时,C++ DLL的输出被重定向到文件,但是当从JNA调用C包装时,只有C包装器和java的输出被重定向到文件(C++ DLL的输出被忽略)。


C++ MSDL采用MSVC 2013和C DLL包装器进行编译。我使用的是Windows 7。

代码比1000字要好。请记住,JVM可能正在对C或C++输出流进行重定向,这些流不会出现在原始C/C++程序中。我认为“Java控制台”是指启动JVM的终端?