7

感谢您阅读这个问题。

我正在做这个作业,它需要一个 GUI 作为前端,以与用 C++ 编写的后端代码集成。

我想用java编写这个前端GUI作为它的跨平台特性和强大的图形组件。

有什么好方法可以很好地集成 java 和 C++ 吗?

谢谢

4

5 回答 5

3

痛饮效果很好。这是一种将 C/C++ 绑定到多种语言的方法。我有使用它与 C++ 交谈的经验,而且几乎没有悲伤。这是一起使用 Swig 和 Java的手册页。本教程让您快速上手,其中包含许多示例,包括 Java。

但是,我会研究将您的应用程序拆分为客户端/服务器架构,以将 C++ 后端与 Java 前端分开。您将避免 C++/Java 开发和集成的痛苦 = 尽管您必须根据要求在前端和后端之间实现一些通信协议(例如基本套接字/Web 服务/HTTP+REST 或可能的 CORBA - 原生于Java,专为跨语言通信而设计)。

于 2009-12-03T22:02:58.563 回答
2

假设您是后端组件在同一台机器上,您可以使用其他人描述的接口层

  • JNI
  • JNA
  • 痛饮
  • QT占比

这些都要求您在 dll 中提供 c++ 后端,并且通常为 C 函数和有时为 c++ 类提供 Java 代理。所有这些都有一个学习曲线,并且需要一些工作来启用代理。

另一种方法是使用 c++ 进程并使用

  • 命令行
  • 标准输入/标准输出

如果您想支持跨网络的通信

  • 插座
  • 科尔巴
  • 网页服务
  • 节约

这些也有学习曲线和一些设置成本

其中,命令行或 stdin/stdout 可能是用最少的精力和知识就能最快完成工作的。但是它不能很好地扩展到大型接口,因为您必须将每条消息的输入和输出编码为文本

对于命令行方法,您使用选项的命令行开关执行 c++ 进程,结果是从进程标准输出或其退出代码中读取的。

对于标准输入/标准输出,您启动进程,每个请求都发送到进程的标准输入,结果从标准输出读取。

于 2009-12-04T09:55:19.427 回答
1

看看JNI(Java Native Interface)。Sun 有一本关于 JNI的在线书籍。

于 2009-12-03T21:58:39.147 回答
1

节俭呢?

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

于 2009-12-03T21:58:52.483 回答
1

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

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

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

于 2009-12-03T22:40:22.950 回答