Есть десктопная вендовая аппликуха с интерфейсом расширения C++ dll. Есть расширения (dll-ки), которые лопатят time-series и вызывают callback.
Хочется предоставить этот api под линуксом, причем приложение будет на Java.
Идея, что возможно написать winelib- суррогатный процесс, который бы загружал dll и дергал у нее методы, предоставлял ей callback. Чтобы java- процесс скрытно spawn-л этот суррогат и слал ему команды, предоставлял данные на вход и забирал результаты через memory-mapped file. Получается овер-инжиниринг. Есть ли примеры готовых решений? Можно ли как-то попроще сделать?
Здравствуйте, Тёмчик, Вы писали:
Тё>Есть десктопная вендовая аппликуха с интерфейсом расширения C++ dll. Есть расширения (dll-ки), которые лопатят time-series и вызывают callback.
Тё>Хочется предоставить этот api под линуксом, причем приложение будет на Java.
Тё>Идея, что возможно написать winelib- суррогатный процесс, который бы загружал dll и дергал у нее методы, предоставлял ей callback. Чтобы java- процесс скрытно spawn-л этот суррогат и слал ему команды, предоставлял данные на вход и забирал результаты через memory-mapped file. Получается овер-инжиниринг. Есть ли примеры готовых решений? Можно ли как-то попроще сделать?
JNI +
https://github.com/taviso/loadlibrary
На мой взгляд самый вменяемый вариант будет — отвязать эту DLL от венды, сделать её кросс-платформенной (зачем ей венда?), а связь с Java организовать по сети, например через REST-интерфейс или WebSockets. Или связь сделать через stdin/stdout, если такого примитивного интерфейса хватит.
С JNI будет проблема в том, что жава 64-битная, а приложение 32-битное. Надо или туда или туда.
Здравствуйте, vsb, Вы писали:
vsb>На мой взгляд самый вменяемый вариант будет — отвязать эту DLL от венды, сделать её кросс-платформенной (зачем ей венда?), а связь с Java организовать по сети, например через REST-интерфейс или WebSockets. Или связь сделать через stdin/stdout, если такого примитивного интерфейса хватит.
Лучше всего переписать на java
vsb>С JNI будет проблема в том, что жава 64-битная, а приложение 32-битное. Надо или туда или туда.
Это не только в яве такая проблема
Тогда уж что-то типа vm в vm
https://github.com/ianopolous/JPC