如何从 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 中执行。
另一个不错的选择是
这基本上可以处理所有事情,可以说无处不在(通过 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 端声明接口并调用适当的方法。
我有一个项目的现有 cpp 文件,我想将它用于我在 Java 中的应用程序。我无法更改 cpp 文件。如何调用 Java 中的函数?
我在 Windows 10 工作,我的应用程序使用 JavaFX。我看过一些关于 JNI 的文章,但 none 似乎解决了我的问题。
如果不需要 JNI 或 swig 或者看起来级别太低,
一个真正直截了当的方法 是将 .cpp 包装在 c/c++ 程序中并构建一个转储到 stdout/file 的 .exe。然后通过外部 shell 命令在 java 中执行。
另一个不错的选择是
这基本上可以处理所有事情,可以说无处不在(通过 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 端声明接口并调用适当的方法。