Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сложная native-функция / 25 сообщений из 37, страница 1 из 2
24.08.2017, 10:39
    #39509726
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Привет всем,

Возникла потребность реализовать в Java интерфейсные native -функции со сторонней C++
библиотекой. Вся беда в том, что многие функции в этой библиотеке возвращают значения
через свои REF-параметры. А как их передать обратно в native-функцию Java пока никак не
придумаю. С Java дружу не так давно, опыта мало, и на ум приходит, пока, только одно
решение: создать некий промежуточный класс с описанием внутренних полей-параметров,
количество которых будет совпадать с количеством REF-параметров в c++ функции, и
передавать такой объект в качестве одного из параметров native-функции. Внутри последней
присваивать полям переданного объекта необходимые (возвращенные C++) значения.
Проблема в таком решении, что для каждой функции потребуется создавать свой отдельный
класс-представитель с перечнем своих полей-параметров. Вот и сижу - голову ломаю.
Может быть кто-то из уважаемых форумчан сталкивался с такой задачей и/или может
подсказать наиболее оптимальное ее решение?
...
Рейтинг: 0 / 0
24.08.2017, 11:02
    #39509753
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Я-бы все сериализировал в JSON на стороне С++ и передавал строками.
...
Рейтинг: 0 / 0
24.08.2017, 11:48
    #39509779
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63Привет всем,

Возникла потребность реализовать в Java интерфейсные native -функции со сторонней C++
библиотекой. Вся беда в том, что многие функции в этой библиотеке возвращают значения
через свои REF-параметры. А как их передать обратно в native-функцию Java пока никак не
придумаю. С Java дружу не так давно, опыта мало, и на ум приходит, пока, только одно
решение: создать некий промежуточный класс с описанием внутренних полей-параметров,
количество которых будет совпадать с количеством REF-параметров в c++ функции, и
передавать такой объект в качестве одного из параметров native-функции. Внутри последней
присваивать полям переданного объекта необходимые (возвращенные C++) значения.
Проблема в таком решении, что для каждой функции потребуется создавать свой отдельный
класс-представитель с перечнем своих полей-параметров. Вот и сижу - голову ломаю.
Может быть кто-то из уважаемых форумчан сталкивался с такой задачей и/или может
подсказать наиболее оптимальное ее решение?

А есть какие то требования по производительности ?
...
Рейтинг: 0 / 0
24.08.2017, 11:52
    #39509783
am_sasa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63,
сюда смотри
в инете примеров вагон и маленькая тележка
...
Рейтинг: 0 / 0
24.08.2017, 11:53
    #39509784
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
am_sasaJNA

не советовал бы, если нужна производительность.
...
Рейтинг: 0 / 0
24.08.2017, 11:55
    #39509788
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63Привет всем,

Возникла потребность реализовать в Java интерфейсные native -функции со сторонней C++
библиотекой. Вся беда в том, что многие функции в этой библиотеке возвращают значения
через свои REF-параметры. А как их передать обратно в native-функцию Java пока никак не
придумаю. С Java дружу не так давно, опыта мало, и на ум приходит, пока, только одно
решение: создать некий промежуточный класс с описанием внутренних полей-параметров,
количество которых будет совпадать с количеством REF-параметров в c++ функции, и
передавать такой объект в качестве одного из параметров native-функции. Внутри последней
присваивать полям переданного объекта необходимые (возвращенные C++) значения.
Проблема в таком решении, что для каждой функции потребуется создавать свой отдельный
класс-представитель с перечнем своих полей-параметров. Вот и сижу - голову ломаю.
Может быть кто-то из уважаемых форумчан сталкивался с такой задачей и/или может
подсказать наиболее оптимальное ее решение?

Выделяете память и льете туда в сериализованном виде на стороне С++

Джаве передаете указатель и соотв десериализуете на стороне Джавы.
...
Рейтинг: 0 / 0
24.08.2017, 11:59
    #39509792
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Здесь тоже автора надо спросить о платформе. Поскольку это С++ то такие пустяки как размер
символа (char) и длина integer, текущая локаль и кодировка и BigEndian уже не эфемерны а совершенно
реальны и надо с ними что-то делать. Я не верю что какие-то Java-библиотеки дистанциируют
нас от этих вопросов. Просто не верю. Полюбому "стрельнет".
...
Рейтинг: 0 / 0
24.08.2017, 12:13
    #39509806
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Спасибо всем откликнувшимся. Существенных требований к производительности
пока нет. Т.е. задача не real-time. Наверное, больше интересует простота интеграции и
надежность решения.
...
Рейтинг: 0 / 0
24.08.2017, 12:15
    #39509807
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63, отпишись как получилось. Мне интересно.
...
Рейтинг: 0 / 0
24.08.2017, 12:17
    #39509809
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Да и платформа MS Windows. (Visual studio 2008)
...
Рейтинг: 0 / 0
25.08.2017, 12:41
    #39510406
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Появилась идея передавать ByRef-аргументы в native функцию в виде AtomicReference
объектов и уже внутри последней, вызовом метода set(v), присваивать значения,
возвращенные c++ функцией. На выходе получаем значения методом get(). Судя по
описанию пакета atomic должно сработать. Надо пробовать.
...
Рейтинг: 0 / 0
25.08.2017, 12:42
    #39510409
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63Появилась идея передавать ByRef-аргументы в native функцию в виде AtomicReference
объектов и уже внутри последней, вызовом метода set(v), присваивать значения,
возвращенные c++ функцией. На выходе получаем значения методом get(). Судя по
описанию пакета atomic должно сработать. Надо пробовать.

Хотите ява объекты конструировать прямо из плюсов ?

Удачи )
...
Рейтинг: 0 / 0
25.08.2017, 12:44
    #39510412
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Конструировать из плюсов не надо. Изначально объект будет создан в Java. В c++
только будет вызываться для него метод set().
...
Рейтинг: 0 / 0
25.08.2017, 12:47
    #39510417
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63Конструировать из плюсов не надо. Изначально объект будет создан в Java. В c++
только будет вызываться для него метод set().

Ссылку на что Вы туда сетить будете ?
На С++ объект или на что ?
...
Рейтинг: 0 / 0
25.08.2017, 12:48
    #39510419
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Семен.СеменовичХотите ява объекты конструировать прямо из плюсов ?

Какие сложности?
...
Рейтинг: 0 / 0
25.08.2017, 12:50
    #39510422
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
BlazkowiczСемен.СеменовичХотите ява объекты конструировать прямо из плюсов ?

Какие сложности?

Под прямо из плюсов я имел ввиду прямо из плюсов )))

Я то все о производительности задумываюсь ))
...
Рейтинг: 0 / 0
25.08.2017, 12:51
    #39510424
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Если на производительность пофигу - делаем все через XML :) и передаем через SOAP :)
...
Рейтинг: 0 / 0
25.08.2017, 12:59
    #39510433
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Семен.Семенович

Не пойму Вашего сарказма. Если внутри c-функции я получил необходимые значения
от host-функции, и зная их типы, какая проблема вызвать через JNI метод set() для
соответствующего переданного Java-объекта (параметра), класс которого известен?
...
Рейтинг: 0 / 0
25.08.2017, 13:06
    #39510442
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63Семен.Семенович

Не пойму Вашего сарказма. Если внутри c-функции я получил необходимые значения
от host-функции, и зная их типы, какая проблема вызвать через JNI метод set() для
соответствующего переданного Java-объекта (параметра), класс которого известен?

Никаких используя JNI можно сделать все что угодно.

Можно также использовать упомянутый XML + Soap.

Можно все положить в оракл а из явы вытащить из оракла

Можно отправить по почте и прочитать с явы.

Все варианты хороши, если на перфоманс пофигу.
...
Рейтинг: 0 / 0
25.08.2017, 13:18
    #39510453
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
https://github.com/aclindsa/jnioverhead

Вот поиграйтесь

Раза в 2 просадка производительности при вызове JNI без параметров

Если появляются параметры все становится еще плачевнее

А уж создание Java объектов из С++ и работа с ними через JNI слой заставляет содрогнуться волосы на моей голове.
...
Рейтинг: 0 / 0
25.08.2017, 13:31
    #39510466
avs63
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Семен.Семенович

Про производительность JNI спорить не буду - тут, наверное, Вы правы. Но, как я уже
писал, задача у меня не real-time. Главное, чтобы работала, и с высокой степенью
надежности/предсказуемости.
...
Рейтинг: 0 / 0
25.08.2017, 13:33
    #39510468
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63Семен.Семенович

Про производительность JNI спорить не буду - тут, наверное, Вы правы. Но, как я уже
писал, задача у меня не real-time. Главное, чтобы работала, и с высокой степенью
надежности/предсказуемости.

Да всех благ.

Я там еще 5-ок способов передать из плюсов в яву представил ))))

А вообще смотрим батл гнойного
YouTube Video
...
Рейтинг: 0 / 0
25.08.2017, 14:20
    #39510529
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
avs63Главное, чтобы работала
Вы не поняли. Работать будут все варианты. Даже через json или базу как трубопровод передачи.
Получается, пишите как умеете.
Пишите обертку класс над dll, а там как хотите. Требований нету и внутреннее дело класса.
...
Рейтинг: 0 / 0
25.08.2017, 21:36
    #39510789
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
Сегодня JSON-парсеры в Java быстры как никогда. Браузерные игры на них делают и прочее.

Вобщем-то тут и думать нечего.
...
Рейтинг: 0 / 0
25.08.2017, 21:40
    #39510790
Семен.Семенович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная native-функция
maytonВобщем-то тут и думать нечего.

Конечно, думать вообще вредно.

Берем JSON и в бой )
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сложная native-функция / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]