powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сложная native-функция
37 сообщений из 37, показаны все 2 страниц
Сложная native-функция
    #39509726
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Да всех благ.

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

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

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

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

Берем JSON и в бой )
...
Рейтинг: 0 / 0
Сложная native-функция
    #39510791
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.Семенович, ну привет. Как там твоя оптимизация?
...
Рейтинг: 0 / 0
Сложная native-функция
    #39510793
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСемен.Семенович, ну привет. Как там твоя оптимизация?

Отлично )
...
Рейтинг: 0 / 0
Сложная native-функция
    #39510794
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот решил брать пример с местных гуру ))
...
Рейтинг: 0 / 0
Сложная native-функция
    #39510795
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семен.Семенович, я не гуру. Обычный участник.
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511117
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати в С++ мной создан клон темы с кешами. И некоторые правильные "гуры" уже
высказали свои соображения по практике этого вопроса.
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511271
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКстати в С++ мной создан клон темы с кешами. И некоторые правильные "гуры" уже
высказали свои соображения по практике этого вопроса.

А почему "гуры" в кавычках.

Плюсисты там дело как раз говорят.
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511272
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я фигурально.
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511273
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ фигурально.

http://www.1024cores.net/home/in-russian/ram---ne-ram-ili-cache-conscious-data-structures

RAM - не RAM, или Cache-Conscious Data Structures

Это точь в точь о чем я писал.
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511276
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторCache-Conscious Binary Search


Это была разминка, теперь более интересные и нетривиальные вещи.
Как организовать быстрый бинарный поиск при большом объёме данных? Ответ теоретика — с помощью бинарного дерева. Ну ладно, простим ему это. Конечно, с помощью упорядоченного массива. На маленьком объеме данных это будет работать хорошо, но вот на большом — не очень. Что бы понять почему, надо рассмотреть как происходит перемещение "точки поиска" по массиву в вслучае бинарного поиска. Вначале точка устанавливается на середину (1/2), потом "скачет" либо на 1/4, либо на 3/4, потом — на 1/8, 3/8, 5/8, 7/8 и т.д. Т.е. вначале "скачки" очень большие и хаотические. При этом из каждой
загруженной кэш-линии используется в основном только один элемент, ближайшие к нему элементы не используются.


И заметьте тут нет ни слова ни про Mac ни про Java ни про зависимость от платформы.

Надо уходить в С++.
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511282
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте не писать тут. Другая тема все таки.
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511526
avs63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому-то интересно...
Сделал таким образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class NativeArgument<T> {
    private T value;
    public T get (return value;)
    public void set (T v) {v = value;}
    @Override
    public String toString() {return String.valueOf(value);}
}   

// пример объявления
public native int someCPPMethod(int par1, String par2, @InOut NativeArgument ...par3); 


@InOut - декларация для понимания того, что параметр как принимает значение, так и возвращает новое
...
Рейтинг: 0 / 0
Сложная native-функция
    #39511534
Семен.Семенович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avs63Если кому-то интересно...
Сделал таким образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class NativeArgument<T> {
    private T value;
    public T get (return value;)
    public void set (T v) {v = value;}
    @Override
    public String toString() {return String.valueOf(value);}
}   

// пример объявления
public native int someCPPMethod(int par1, String par2, @InOut NativeArgument ...par3); 


@InOut - декларация для понимания того, что параметр как принимает значение, так и возвращает новое

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


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