Выполнение файлов JAR в программе C ++ - PullRequest
1 голос
/ 05 ноября 2011

Я занимаюсь разработкой программного обеспечения САПР, в котором для моей графики , которую я использую opnegl , а ядро ​​ разрабатывается в c ++ .Для оконного интерфейса мне посоветовали использовать QT , но так как мое программное обеспечение предназначено для коммерческого использования, я не хочу использовать QT, но лучше использовать Java .Моя проблема в том, могу ли я использовать jar exe в моей программе на c ++ (поскольку мое ядро ​​находится на C ++ и ядро ​​контролирует программу)?Если да, кто-нибудь может привести простой пример или какой-нибудь сайт.Если нет, каков другой вариант?

Мне требуется интерфейс Windows, в основном, чтобы позволить пользователю выбирать операции, которые он хочет выполнить (создать точку, линию, окружность и т. Д.), Предоставляя некоторые маленькие значки , на котором пользователь может нажать .Мне также требуется, чтобы интерфейс Windows для всплывающего окна 1024 * отображал предупреждений , ошибок , принимал входных аргументов и т. Д.

Ответы [ 4 ]

2 голосов
/ 05 ноября 2011

Вы можете использовать Qt даже в коммерческих проектах, если используете их dll без изменений.

Но вы также можете использовать JNI (собственный интерфейс Java) для взаимодействия Java с c ++.Или вы можете использовать что-то вроде swig .Swig генерирует Java-классы из предложений C ++.Это значительно упрощает работу по взаимодействию двух языков.

Возможно, это необходимо и отличается от того, что вы хотели, что вам нужно запустить свое приложение на Java.Затем Java загружает ядро ​​c ++ через dll и затем вызывает функции.

1 голос
/ 05 ноября 2011

Вы можете встроить виртуальную машину Java непосредственно в программу C ++. JVM предоставляет API, который позволяет создавать экземпляры виртуальной машины в том же пространстве процессов, что и ваша собственная программа.

Однако вместо того, чтобы встраивать JVM в ваше нативное приложение, я думаю, что лучше сделать обратное: пусть JVM вызывает ваш нативный код.

Оба требуют использования собственного интерфейса Java (JNI), но в первом случае необходимо выполнить несколько дополнительных шагов в отношении собственных функций, доступных для виртуальной машины. Эти дополнительные требования могут быть трудно удовлетворить с крупными собственными приложениями.

См. главу 8.3 из Руководства по нативному интерфейсу Java:

8.3 Регистрация собственных методов

[...] RegisterNatives особенно полезен, когда нативное приложение встраивает реализацию виртуальной машины и требует связи с нативной реализацией метода, определенной в нативном приложении. Виртуальная машина не сможет автоматически найти реализацию этого собственного метода, поскольку она выполняет поиск только в собственных библиотеках, а не в самом приложении.

Другими словами, все не родные методы dll_exported должны быть вручную зарегистрированы на ВМ. Это довольно тяжелое требование.

0 голосов
/ 10 апреля 2013

Что бы вы ни делали, НЕ используйте system ().// Вот почему: http://www.cplusplus.com/forum/articles/11153/

0 голосов
/ 05 ноября 2011

Я не знаю точно, как запустить файл JAR через C ++ (кроме очевидных system() или CreateProcess() или fork()\exec() вызовов для выхода из C ++, подходящего для ОС).

Тем не менее, вы можете подумать о том, чтобы ваше приложение состояло из нескольких независимых процессов, которые взаимодействуют через сокеты TCP или UDP.Тогда каждая пьеса может быть написана на любом языке, который имеет смысл.Например, вы можете настроить центральное ядро ​​приложения (написанное на C ++) на TCP-сервер, а затем приложения «панели инструментов» (написанные на Java) отправлять пакеты команд основной программе через выделенное сокетное соединение.Если подумать, UDP, вероятно, лучше для этого.В любом случае, вы поняли.

Кроме того, не уверен насчет причин, по которым вы отказываетесь от Qt - многие коммерческие приложения использовали его, и он вполне настраиваемый (хотя я должен признаться, что сам я не большой поклонник по другим причинам).

...