有没有可以整合Java和C++的工具?

7

感谢阅读这个问题。

我正在做一个作业,需要使用GUI作为前端与后端C++代码集成。

我想用Java编写这个前端GUI,因为它具有跨平台功能和强大的图形组件。

有没有好的方法可以很好地集成Java和C++?

谢谢。

5个回答

3
Swig非常好用,它是将C/C++与多种语言绑定的手段。我有使用它与C++进行交互的经验,且很少会出现问题。这里是关于如何在Java中使用Swig的手册页面。而教程则提供了许多示例,包括Java,可以帮助您快速入门。
不过,我建议您考虑将应用程序拆分为客户端/服务器架构,以将C++后端与Java前端分离。这样可以避免C++/Java开发和集成过程中的痛苦,但根据需求(例如基本套接字/ Web服务/ HTTP + REST或可能的CORBA-专为跨语言通信而设计),您需要在前端和后端之间实现某些通信协议。请注意保留HTML标记。

2
假设您的后端组件在同一台机器上,您可以使用其他人描述的接口层,例如:
JNI
JNA
Swig
QTJambi
这些都需要将c++后端可用于dll,并通常为C函数和有时为c++类提供Java代理。所有这些都有学习曲线,并且需要一些工作来启用代理。
另一种方法是使用c++进程,并使用以下任一方式进行通信:
命令行
stdin/stdout
如果要支持跨网络通信,则可以使用:
sockets
CORBA
WebServices
Thrift
这些也有学习曲线和一些设置成本。
其中,命令行或stdin/stdout可能是最快以最小的努力和知识量开始工作的方法。但是,对于大型接口,它不会很好地扩展,因为您必须将每个消息的输入和输出编码为文本。
对于命令行方法,您使用命令行开关执行c++进程,结果从进程的标准输出或其退出代码中读取。
对于stdin/stdout,您启动进程,每个请求都发送到进程的stdin,而结果则从stdout中读取。

1

看一下 JNI(Java本地接口)。Sun 公司有一本关于JNI的在线 书籍


1

那么Thrift怎么样?

Thrift是一个用于可扩展跨语言服务开发的软件框架。它结合了软件堆栈和代码生成引擎,构建出能够在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk和OCaml之间高效无缝工作的服务。


1

如果你不想自己编写 C++ 后端库,而只是想使用第三方库,更好的选择是使用 JNA

在这种情况下,使用 JNA 而不是 JNI 的主要好处是,桥接代码全部使用 Java 编写(而不是本地语言,在你的情况下是 C++)。这意味着您不需要通过构建 C++ JNI 接口来复杂化构建流程,所有接口工作将使用主项目语言编写。

但是,如果您正在自己编写 C++ 后端,则已提供的任何其他选项都同样适用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接