Используйте статические библиотеки Windows из Java-кода с минимальными усилиями (желательно с использованием JNA).

StackOverflow https://stackoverflow.com/questions/845016

Вопрос

Мне нужно использовать некоторую статическую библиотеку Windows (*.lib) из Java-кода я могу написать обертки C++ JNI, но предпочитаю этого не делать (не такой опыт работы с C++).

Каким будет самый простой (с наименьшими усилиями по разработке) способ его использования, производительность не важна, поскольку этот код будет просто получать некоторые данные, которые, скорее всего, будут обрабатываться на стороне JAVA.

Скорее всего, я бы использовал ЮНА, но AFAIK нужны динамические библиотеки, а у меня статические.

Я также задал вопросо конвертации статических библиотек в динамические.

Это было полезно?

Решение

Как бы то ни было, некоторое время назад у меня был такой проект.Автоматически сгенерировать обертки JNI было довольно легко.Я думаю, нам нужно было обернуть около 350 экспортированных функций.Нам потребовалось около 3 часов, чтобы собрать скрипт для автоматического создания оболочки (извините, у меня нет под рукой скрипта, иначе я бы его опубликовал).

Мы сами почти не писали кода на C++, но это требовало понимания того, как работает JNI...На самом деле это довольно хорошая возможность/проект для обучения – если у вас есть время, не бойтесь JNI – вы будете поражены тем, как много вы узнаете о том, как работает JVM…

Если вы пойдете по этому пути, я рекомендую вам сделать ваши функции-оболочки очень, очень легкими - буквально без какой-либо обработки в них.Просто преобразуйте необходимые аргументы из значений JNI в собственные (это в основном необходимо для строк), вызовите собственную функцию и преобразуйте результаты обратно.

Если у вас есть функция, которая передает указатель на строку и ожидает, что строка вернется в указатель, используйте массив строк размером 1 со стороны Java и заполните его результатом собственного вызова.

Или, если у вас мало времени, скомпилируйте .lib в .dll и используйте JNA :-)

Другие советы

Вы всегда можете создать проект DLL (динамическая библиотека), который вызывает непосредственно вашу статическую библиотеку, а затем вы можете использовать JNA с новой созданной DLL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top