如何从 java 调用 c++ 目标文件中的函数?

How to call a function in a c++ object file from java?

我有一个项目的现有 cpp 文件,我想将它用于我在 Java 中的应用程序。我无法更改 cpp 文件。如何调用 Java 中的函数?

我在 Windows 10 工作,我的应用程序使用 JavaFX。我看过一些关于 JNI 的文章,但 none 似乎解决了我的问题。

如果不需要 JNI 或 swig 或者看起来级别太低,

一个真正直截了当的方法 是将 .cpp 包装在 c/c++ 程序中并构建一个转储到 stdout/file 的 .exe。然后通过外部 shell 命令在 java 中执行。

另一个不错的选择是

Apache thrift

这基本上可以处理所有事情,可以说无处不在(通过 auto-generating 目标语言代码工作),这是我通常在 RPC 情况下推荐的一种。但是,可能会涉及更多的设置成本(最终取决于您的实际需求)- 还因为您需要在服务中托管 .cpp,在您的情况下,在本地。

如果将库打包到共享对象或 dll 中,也可以使用 JNA:https://github.com/java-native-access/jna or https://github.com/java-native-access/jna/blob/master/www/GettingStarted.md

例如,您已经映射到 Windows API。 另一个例子是 Java 中 mediainfo 的映射:https://github.com/andersonkyle/mediainfo-java-api/blob/master/src/main/java/org/apothem/mediainfo/api/MediaInfo.java

请注意,据我所知,这是基于 JNI 的:它简化了过程,因为您通常只需要在 Java 端声明接口并调用适当的方法。