1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/sweetdark-jnitool

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

@jnitool version 1.0

Требования к инструменту

Это инструмент для генерации кода, предназначенный для упрощения взаимодействия между C++ и Java через JNI. Он позволяет легко преобразовывать пользовательские структуры данных Java в структуры C++. Инструмент обеспечивает централизованное управление доступом к пользовательским структурам Java, избегая необходимости повсеместного использования JNI для доступа к этим структурам.

Например, если вы измените имя или поля структуры Java, и не обновите соответствующие вызовы в C++, то компиляция пройдёт успешно, но во время выполнения могут возникнуть неожиданные ошибки. Однако, если использовать доступ к соответствующим структурам C++, при изменении структуры Java достаточно обновить структуру C++ с помощью инструмента (если необходимо внести изменения в не-примитивные типы или массивы). В этом случае, при компиляции других частей кода, ошибки будут возникать из-за неправильного доступа к полям структуры.

Использование инструмента

Для работы инструмента требуется установить JDK. Для удобства использования в командной строке, можно добавить путь к инструменту в переменные среды.

Использование: jnitool [опции] [пакет] класс
Эта программа вызывает команду javap. Убедитесь, что команда javap доступна в командной строке.
-classpath <каталог> — указать путь к каталогу с классами, без пробелов, по умолчанию используется текущий каталог.
-out <каталог> — задать выходной каталог, без пробелов, по умолчанию используется текущий каталог.
-help — вывести справку.
Пример:
jnitool -classpath e:\my_project\bin\com\cn -out e:\my_project\src Data
jnitool com.cn.Data
jnitool -help

Инструмент генерирует файлы с именами, соответствующими именам классов Java, например, Data.h и Data.cpp.

  • Исходный код написан на Python 2.7.
  • При загрузке исходного кода можно использовать py2exe для упаковки. Запустите python setup.py py2exe.

Недостатки версии

  • Для не-примитивных типов невозможно сгенерировать соответствующий код JNI, требуется доработка. Невозможно напрямую присвоить значение объекта C++ объекту Java через JNI. Это можно сделать, обратившись к документации JNI. Например, объект String в Java.
  • Поддерживаются только публичные поля (необходимо рассмотреть поддержку приватных полей, так как иногда приватные поля не должны быть доступны извне. В Java рекомендуется использовать приватные поля и методы get/set, что отличается от подхода C++, где все поля обычно являются публичными).
jstr = (*env)->GetObjectField( obj, fid);
str = (*env)->GetStringUTFChars(jstr, NULL);
if (str == NULL) {
	return; /* out of memory */
}
(*env)->ReleaseStringUTFChars(jstr, str);
/* Create a new string and overwrite the instance field */
jstr = (*env)->NewStringUTF("123");
if (jstr == NULL) {
	return; /* out of memory */
}
(*env)->SetObjectField(obj, fid, jstr);

Тестирование

После настройки переменных среды, перейдите в каталог example (в Windows можно открыть командную строку в каталоге example, нажав Shift+правый клик мыши), и запустите jnitool com.Point. Вы увидите сгенерированные файлы point.h и point.cpp.

Планируемые функции

  • Поддержка массивов базовых типов.
  • Добавление конфигурационного файла, возможность определения пространства имён и имён выходных файлов через конфигурацию.

Обратная связь

Вы можете оставить обратную связь следующими способами:

  • Создать issue на сайте git.oschina.net/sweetdark/jnitool/issues.
  • Отправить email на адрес qiujunwei1@gmail.com.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Реализовать на Python преобразование файла класса Java в структуру C++ и класс преобразования JNI. Развернуть Свернуть
GPL-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/sweetdark-jnitool.git
git@api.gitlife.ru:oschina-mirror/sweetdark-jnitool.git
oschina-mirror
sweetdark-jnitool
sweetdark-jnitool
master