gpt4 book ai didi

java - 使用 Java 从方法调用中读取 C++ 控制台输出

转载 作者:行者123 更新时间:2023-12-03 06:52:38 27 4
gpt4 key购买 nike

目前,我正在尝试在有方法调用时读取程序的控制台输出。它的工作原理是,我的 Java 程序调用 JNI 包装器来调用 C++ 方法调用。我的 C++ 正在使用 std::cout . payload.invoke将调用我的 C++ 库 API。在 c++ API 中有一些 cout 语句。这就是我想在 Java 中将其作为变量读取的语句。
当前PrintStream仅支持 out, print, println and printf .每次有方法调用时,都会在命令提示符中打印出一堆日志。现在,我希望我的 Java 程序能够读取我的 C++ 打印出来的那些输出。
这是我当前的 Java 代码:

public void execute() {
try {
Matcher m = Pattern.compile("([^()]*)[(]([^()]*)[)]").matcher(getPayloadString());
m.find();
boolean passed;
if (m.group(2).isEmpty()) {
// this is where it invoke the method
passed = (boolean) payload.invoke(testcase);
System.out.println("Boolean is: " + passed + "\n");
}else {
passed = (boolean) payload.invoke(testcase, ObjectCreator.convertParameters(m.group(2)));
System.out.println("Boolean2 is: " + passed + "\n");

}
String output = passed ? "PASS" : "FAIL";
// I want to use the console output string variable here -> xxxx
TestCase.printResult(payload.getName(), output, m.group(2), xxxx, "");
} catch (Exception ex) {
ex.printStackTrace();
}
}
有什么方法可以做到吗?以前我尝试使用来自 here 的教程之一。 .但这似乎不起作用。有人可以帮我解决这个问题吗?提前致谢。

最佳答案

如果您完全控制 .cpp 代码库,则可以将 std::cout 更改为 ostream& 。
通过引用基类,您可以轻松切换实现。
做一个扩展 ostream& 的 JNI-Stream 并覆盖你需要将 JNI 包装的回调发送到 java 的操作符。
然后根据您是运行 native 还是 Java 风格,使用 JNI-Stream 而不是 std::cout。
我会做一些如下面的链接所示的操作来打包数据并将其发送到 Java:
JNI - How to callback from C++ or C to Java?
那是我的 2 美分。

关于java - 使用 Java 从方法调用中读取 C++ 控制台输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64442386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com