为独立应用程序绑定一个 java swing gui 和 c++ 后端,它们形成两个不同的项目
Bind a java swing gui and c++ backend for a standalone application, which form two different projects
我想为独立应用程序绑定 JAVA Swing GUI 和 C++ 后端。这两个形成两个不同的项目。我读过 Java Native 界面。虽然 JNI 似乎是最好的解决方案,但我对 JNI 有几个问题:
- JNI 可以帮我绑定不同的项目吗(一个在 Java swing 和其他
在 C++ 中)?
- 如果是,与绑定同一项目中的文件有何不同?
作为 JNI 的新手,详细的技术帮助会有所帮助。
- 是的。
JNI 帮助我们从 java 执行对我们自己的 C++ 库的调用。
我猜你打算让 GUI 和 C++ 在同一个进程上(如果是,JNI 是答案,如果不是,你将不得不求助于进程内通信)。
- 您必须动态绑定来自不同语言的项目。
Java 是托管内存,这意味着您对内存没有真正的所有权(万能的 GC 决定他是否会删除某些内容)。
C++ 是非托管内存,这意味着您将不得不自己捡垃圾。
说到这个区别,很明显,当彼此交互时,您需要确保不要从另一个中删除分配的内存。
这是您在同一项目中从绑定文件中遇到的差异之一。
另一个是您将求助于动态链接。
来自 Java 的代码被编译成中间体,而来自 C++ 的代码被编译成 CPU 特定的汇编程序。这意味着您不能将一个代码用于另一个代码。
因此我们求助于动态链接。
C++ 代码将编译成共享库(.so 或 .dll,具体取决于平台)。在运行时,您的 java Swing 应用程序(这将是入口点)会将动态库加载到程序的内存中(您需要从您的代码中手动调用它,System.loadLibrary 是函数,如果我没记错)。
加载库后,如果你正确地构建了你的库(为此你需要遵循教程,我不打算在这里解释),你将在 java.
使用 JNI 时的通常做法是创建一个桥接库,将许多 C++ 函数链接到 Java 中的桥接 class。
有自动程序可以为您创建此桥(例如 SWIG),但我强烈建议您避免使用它们(特别是因为您没有完全掌握 JNI)。
我想为独立应用程序绑定 JAVA Swing GUI 和 C++ 后端。这两个形成两个不同的项目。我读过 Java Native 界面。虽然 JNI 似乎是最好的解决方案,但我对 JNI 有几个问题:
- JNI 可以帮我绑定不同的项目吗(一个在 Java swing 和其他 在 C++ 中)?
- 如果是,与绑定同一项目中的文件有何不同?
作为 JNI 的新手,详细的技术帮助会有所帮助。
- 是的。
JNI 帮助我们从 java 执行对我们自己的 C++ 库的调用。
我猜你打算让 GUI 和 C++ 在同一个进程上(如果是,JNI 是答案,如果不是,你将不得不求助于进程内通信)。
- 您必须动态绑定来自不同语言的项目。
Java 是托管内存,这意味着您对内存没有真正的所有权(万能的 GC 决定他是否会删除某些内容)。
C++ 是非托管内存,这意味着您将不得不自己捡垃圾。
说到这个区别,很明显,当彼此交互时,您需要确保不要从另一个中删除分配的内存。
这是您在同一项目中从绑定文件中遇到的差异之一。
另一个是您将求助于动态链接。
来自 Java 的代码被编译成中间体,而来自 C++ 的代码被编译成 CPU 特定的汇编程序。这意味着您不能将一个代码用于另一个代码。
因此我们求助于动态链接。
C++ 代码将编译成共享库(.so 或 .dll,具体取决于平台)。在运行时,您的 java Swing 应用程序(这将是入口点)会将动态库加载到程序的内存中(您需要从您的代码中手动调用它,System.loadLibrary 是函数,如果我没记错)。
加载库后,如果你正确地构建了你的库(为此你需要遵循教程,我不打算在这里解释),你将在 java.
使用 JNI 时的通常做法是创建一个桥接库,将许多 C++ 函数链接到 Java 中的桥接 class。
有自动程序可以为您创建此桥(例如 SWIG),但我强烈建议您避免使用它们(特别是因为您没有完全掌握 JNI)。