Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как сделать с JNI? организация двунаправленной связи 
:(
    Опции темы
Eugene128
Дата 18.10.2007, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Здравствуйте. У меня следующая проблема.
Имеется программа, написанная на С++ (с пользовательским интерфейсом и реалезацией кой-какого алгоритма).
1. Эта программа должна иметь возможность запускать другую программу, написанную на Java.
2. После настройки начальных параметров и запуска програмы, на выходе получается некоторый набор значений, который и передается java-программе.
3. java-программа должна обрабатывать эти значения, И еще должна иметь возможность передавать данные обратно С++ программе, с указанием того что с ними делать, т.е., как я понимаю:
         3.1. Либо вызывать методы С++-программы.
         3.2. Либо класть данные в какой-нибудь файл, и все-равно сообщать С++ программе, что данные положены в файл и их следовало бы взять.

с 1. и 2. вроде понятно - с использованием JNI (invocation) это вроде можно сделать.... 
а вот с остальным не ясно... 
Может кто сможет помочь?
PM MAIL   Вверх
Metal_Heart
Дата 18.10.2007, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



Eugene128, если прога на Срр вызывает прогу на Яве, то прога на Яве не должна вызывать методов проги Срр. По-моему так.

Прога на Срр вызывает и инициализирует прогу на Яве, затем дожидается когда ЯваПрога отработает и забирает данные сама.

Обмен между прогами можно сделать на файлах, сокетах, потоках и, может быть, на чем-нибудь ещё ...


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
AlexeyVorotnikov
Дата 18.10.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Прога на C++ может запустить прогу на Java. Прога на Javа, в свою очередь, через нативные методы может вызывать код, написанный на C++.
И наоборот, прога на Javа через нативные методы может вызывать код, написанный на C++, который может вызывать методы Java классов.
Обмен информацией может быть двусторонним в любом случае.


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Eugene128
Дата 18.10.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Цитата

Обмен информацией может быть двусторонним в любом случае

Разве? 
Сначала: запускаем С-прогу, она вызывает Java-прогу. Вот теперь нужно, например, чтобы из Java-проги можно было бы в С-проге вызвать метод А. Для этого, как я понимаю, нужно засунуть его (А) в dll-ку вместе с JNI-методом (который вызывает метод А). НО: метод А, например, использует другие методы и использует различные объекты, следовательно и их тоже надо засунуть в dll, так? Не получится ли в итоге, что так как вся прога, ясен перец, связанная, то всю её надо засунуть в dll будет  smile ?   

PM MAIL   Вверх
Eugene128
Дата 19.10.2007, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Выскажите, пожалуйста, свое мнение по поводу вот такой организации взаимодействия:
(с использованием JNI и сокетов)

1. Запускается С-прога
2. С- прога "объявляет себя сервером" и запускает Java-прогу (с использованием JNI).
3. При запуске Java-прога "объявляет себя клиентом" и коннектится к С-проге.
4. Дальше можно обмениваться данными туды-сюды... 

Как считаете? 
PM MAIL   Вверх
LSD
Дата 22.10.2007, 09:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



1. Взаимодействие через сокеты дольше, чем через JNI (не знаю насколько тут критична скорость).
2. Если идет взаимодействие через сокет, то зачем тут вообще JNI? Одновременный запуск 2-х программ, можно организовать намного проще.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Eugene128
Дата 22.10.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Цитата

Взаимодействие через сокеты дольше, чем через JNI 

Конечно лучше через JNI, но тогда вот так чтоль придется делать:
1. Засунуть всю прогу на С++(а она здоровая достаточно) в dll, кроме метода main
2. Соответственно сделать exe-шник(метод main, а dll отдельно), который этой dll будет пользоваться с одной стороны, и Java прога с другой стороны...
Так чтоль получается???
  
PM MAIL   Вверх
AlexeyVorotnikov
Дата 23.10.2007, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



При чём тут dll'ки-то?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
LSD
Дата 23.10.2007, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Определись с тем, надо тебе отдельно запускать приложения или нет.

Если такой необходимости нет, и нет необходимости в удаленном взаимодействии, то: запускаешь программу на С++, она в свою очередь инициализирует и запускает JVM, и при необходимости вызывает нужные методы твоей Java программы, и наоборот.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Eugene128
Дата 23.10.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Цитата

вызывает нужные методы твоей Java программы, и наоборот. 

Так как наоборот? Я наверно плохо понимаю как работает JNI... 
В Java программе надо указать где искать нативные методы с помощью System.loadLibrary("TempCalcJava"), где TempCalcJava то место где искать надо, и че-то во всех примерах которые я видел - это dll (TempCalcJava.dll). Или здесь можно указать название exe-шника сишного?

PM MAIL   Вверх
LSD
Дата 23.10.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



System.loadLibrary() нужно для того, чтобы библиотека была загружена в память процесса. В твоем случае достаточно чтобы exe экспортировал нужные тебе JNI функции, и System.loadLibrary() не понадобится.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Eugene128
Дата 23.10.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



А не подскажете как экспортировать нужные JNI функции?
PM MAIL   Вверх
alex_nevolin
Дата 24.10.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 13.8.2007

Репутация: 3
Всего: 4



Предлагается к прочтению
Обратите внимание на "INVOCATION API"
PM MAIL   Вверх
Eugene128
Дата 24.10.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.9.2007

Репутация: нет
Всего: нет



Я этот докусент уже видел... Видел собственно говоря и Invocation API... 
Но дело в том, что в примере там все понятно: запускаем ява машину, а затем находим ява класс и вызываем ява метод. Это я понимаю...
Но вот теперь мне надо из явы вызвать метод С++. LSD сказал, что нужно чтобы exe экспортировал нужные мне JNI функции. 
(а я знаю только как их их dll вытаскивать). Так вот я не знаю как сделать то, что сазал LSD...............
PM MAIL   Вверх
LSD
Дата 24.10.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Eugene128 @  23.10.2007,  20:41 Найти цитируемый пост)
А не подскажете как экспортировать нужные JNI функции?

Это тебе уже лучше спросить в разделе C++, но для начала попробуй просто имплементировать те заготовки которые тебе даст javah. По идее они уже должны содержать декларацию експорта.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.