1

我正在开发一个 CAD 软件,其中我的图形部分使用opnegl并且内核是用c++ 开发的。对于窗口界面,我被建议使用QT,但由于我的软件用于商业用途,我不想使用 QT,而是使用Java。我的问题是,我可以在我的 C++ 程序中使用 jar exe(因为我的内核是 C++ 并且内核控制程序)?如果是的话,任何人都可以提供一些简单的例子或一些网站。如果没有,其他选择是什么?

我需要windows界面主要是为了让用户通过提供一些用户可以点击的小图标来选择他想要执行的操作(创建点、线、圆等)。我还需要用于弹出窗口的 windows 界面来显示警告错误、接受输入参数等。

4

4 回答 4

2

如果您不加修改地使用他们的 dll,您甚至可以在商业项目中使用 Qt。

但是您也可以使用 JNI(Java 本机接口)将 java 与 c++ 接口。或者你可以使用类似swig的东西。Swig 从 c++ 类生成 java 类。它大大简化了连接两种语言的工作。

您需要在 Java 中启动应用程序,这可能是必要的并且与您想要的不同。Java 然后通过 dll 加载 c++ 内核,然后调用函数。

于 2011-11-05T07:07:30.107 回答
1

您可以将 Java 虚拟机直接嵌入到 C++ 程序中。JVM 提供了一个 API,允许在与本机程序相同的进程空间中实例化 VM。

但是,与其将 JVM 嵌入到您的本机应用程序中,我认为最好相反:让 JVM 调用您的本机代码。

两者都需要使用 Java 本地接口 (JNI),但在第一种情况下,对于暴露给 VM 的本地函数,需要执行一些额外的步骤。大型原生应用程序可能难以满足这些额外的要求。

请参阅Java Native Interface Manual 中的第 8.3 章:

8.3 注册本机方法

[...] 当本地应用程序嵌入虚拟机实现并且需要与本地应用程序中定义的本地方法实现链接时,RegisterNatives特别有用。虚拟机将无法自动找到此本地方法实现,因为它仅在本地库中搜索,而不是在应用程序本身中搜索。

换句话说,所有非 dll_exported 的原生方法都必须手动注册到 VM 中。这是一个相当重量级的要求。

于 2011-11-05T14:24:37.880 回答
0

我不确切知道如何通过 C++ 运行 JAR 文件(除了明显的system()or CreateProcess()orfork()\exec()调用以从 C++ 转义到操作系统)。

也就是说,您可能会考虑让您的应用程序由多个通过 TCP 或 UDP 套接字进行通信的独立进程组成。然后每件作品都可以用最有意义的任何语言编写。例如,您可以让应用程序的中央核心(用 C++ 编写)设置 TCP 服务器,然后让“工具栏”应用程序(用 Java 编写)通过专用套接字连接将命令包发送到核心程序。想一想,UDP 可能更好。无论如何,你明白了。

此外,不确定您拒绝 Qt 的原因——许多商业应用程序都使用了它,而且它是完全可定制的(尽管我必须承认我自己不是它的忠实粉丝,出于其他原因)。

于 2011-11-05T06:57:44.137 回答
0

无论你做什么,都不要使用 system()。//原因如下:http ://www.cplusplus.com/forum/articles/11153/

于 2013-04-09T23:58:30.737 回答