Я хочу добавить некоторые обработчики событий Java (на самом деле Clojure) в ОГРОМНОЕ устаревшее приложение C. Что является самым прямым и легко поддерживаемым способом сделать это? Я хотел бы, чтобы классы Java выполнялись в том же процессе, что и код C. Возможно ли это?Как запустить Java из процесса C?
ответ
Java Native Interface, похоже, предназначен для этого. В частности, this section спецификации кажется актуальным.
Исходный код для команды java
доступен. Это хороший пример того, как создать Sun JVM в программе C.
Версия Java 6 (и предстоящая версия JDK 7) доступна на OpenJDK.You может download source code для Java 5 под двумя различными лицензиями.
Кстати, это легко сделать, что «кажется» правильным, но гораздо труднее на самом деле делать правильно. Почему вы хотите, чтобы они работали в одном и том же процессе? Почему бы не тот же поток?
Вы можете подумать о создании моста через TCP/IP между вашим кодом C и процессом Java. Это будет намного лучше, потому что это позволит избежать сюрпризов обслуживания.
Вы думаете, что «сюрпризы обслуживания, какое обслуживание удивляет?» Ах! Сегодня вы хотите позвонить с C на Java, но завтра кто-то захочет вернуться в другую сторону. Вот где твоя проблема становится РЕАЛЬНО болезненной.
Я был здесь раньше. Возьмите мой совет: выполните мост TCP/IP. Это приведет к сбою вашей Java. -Stosh
Я бы переложил много раз, если бы это было разрешено. Ничто не так просто, как должно быть, когда Java взаимодействует с чем-либо еще. У меня ужасная история, но в этом поле нет места ;-) – RBerteig
johnstosh, не могли бы вы уточнить «мост TCP/IP». –
Вы можете сделать это таким образом, но, учитывая, что вы действительно хотите сценаризировать большое приложение C, вы рассматривали GUILE или Lua? Они, где и сделали именно для этой цели.
Цель состоит в том, чтобы написать обработчики событий в clojure, которые будут называться формой программы C, когда что-то произойдет. –
Какую ОС вы нацеливаете? – CookieOfFortune