如何调用java中C++对象文件中的函数?

如何调用java中C++对象文件中的函数?,java,c++,java-native-interface,Java,C++,Java Native Interface,我有一个项目中的现有cpp文件,我想将其用于我的Java应用程序。我无法更改cpp文件。如何从Java调用函数 我在Windows10中使用JavaFX开发我的应用程序。我看过一些关于JNI的文章,但似乎没有一篇能解决我的问题。如果JNI或swig不是理想的,或者看起来太低 一种非常简单的方法是在c/c++程序中包装.cpp,并构建一个转储到stdout/file的.exe。然后通过外部shell命令在java中执行该命令 另一个好的选择是 这基本上可以处理所有事情,可以说是无处不在,它通过自动

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


我在Windows10中使用JavaFX开发我的应用程序。我看过一些关于JNI的文章,但似乎没有一篇能解决我的问题。

如果JNI或swig不是理想的,或者看起来太低

一种非常简单的方法是在c/c++程序中包装.cpp,并构建一个转储到stdout/file的.exe。然后通过外部shell命令在java中执行该命令

另一个好的选择是


这基本上可以处理所有事情,可以说是无处不在,它通过自动生成目标语言的代码来工作,这是我在RPC情况下通常推荐的方法。然而,最终可能会涉及更多的安装成本,这取决于您的实际需要-也因为您需要在本地托管服务中的.cpp。

如果您将库打包在共享对象或dll中,您还可以使用JNA:或

例如,您已经有了到Windows API的映射。 另一个例子是Java中mediainfo的映射:


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

您使用JNI的方法是正确的:使用本机方法创建Java类,然后创建一个C++库,为这些方法提供实现,然后调用这些函数到原始C++库中。如果所涉及的类型不是太复杂,那么您可以使用SWIG生成大多数包装器库。不相关,但是如果我们使用JNI,我们仍然可以将应用程序用于多个平台吗?一个常见的技巧是将每个平台的库的一个变体打包到您的JAR中,并在运行时将适当的变体提取到一个文件中,并在该文件上调用loadLibrary。