从 C++ 调用 Java 方法的最简单方法是啥?

Posted

技术标签:

【中文标题】从 C++ 调用 Java 方法的最简单方法是啥?【英文标题】:What is the easiest way to call a Java method from C++?从 C++ 调用 Java 方法的最简单方法是什么? 【发布时间】:2009-07-10 17:40:20 【问题描述】:

我正在编写一个需要能够读取复杂而深奥的文件类型的 C++ 程序。我已经有一个用于处理这些文件的 Java 程序,其中包括将它们转换为更简单的文件格式的功能。我的想法是,每当我的程序需要从复杂文件中读取信息时,让它调用 Java 方法将其转换为更简单的文件类型,然后将其写入我的程序可以轻松读取的临时文件。这些文件足够小,性能可以接受。我正在用 Qt 编写程序并在 Windows Vista 机器上运行它。

我已经研究过使用 Java 原生接口,但我研究得越多,似乎我应该不惜一切代价避免它。有没有更好的方法来实现这一点,还是我应该继续使用 JNI 方法?

【问题讨论】:

【参考方案1】:

您需要多久执行一次此操作?如果不是那么频繁,您可以在那里掏钱去做。只需生成命令行即可。 JNI 可以工作,但是设置起来有点麻烦。设置好后,它应该可以正常工作了。

【讨论】:

【参考方案2】:

为什么不为java算法创建一个可执行的jar呢?

【讨论】:

【参考方案3】:

使用GCJ 将Java 转换为lib 供您链接。

这可能和 JNI 一样痛苦,但至少您不会再加载或依赖 JRE。

【讨论】:

【参考方案4】:

您可能对SWIG 感兴趣。 "SWIG 是一种软件开发工具,可将用 C 和 C++ 编写的程序与各种高级编程语言连接起来。SWIG 与不同类型的语言一起使用,包括 Perl、php、Python、Tcl 和 Ruby 等常见脚本语言"

【讨论】:

OP 似乎想要反过来。不过,SWIG 看起来很有趣。【参考方案5】:

如果GCJ 是您的一个选项,它将允许您将 Java 程序编译为本机代码,该代码可以作为库与您的 C++(再次,特别是 g++)程序链接,以及包含直接 @ 的头文件987654322@ 所有 Java 内容到 C++ 的映射 - 包到命名空间、类到类、方法到成员函数等等。

【讨论】:

以上是关于从 C++ 调用 Java 方法的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中从文件末尾读取的最有效方法是啥? (解析文件中的最后 128 位)

在 Visual C++ 中执行查询的最简单方法是啥

C++:在 Windows 上使用 C++ 读写 BMP 文件的最简单方法是啥?

在 C++ 预印卡上打印的最简单方法是啥?

在 C++ 中读取格式化输入的最简单方法是啥?

C++ OpenCV:应用二维卷积的最简单方法是啥