Я немного погуглил и не нашел хорошего ответа на свой вопрос: каков обычный способ передачи информации об ошибках в java из собственного кода jni?
Обычно я просто выбираю дизайн и использую его, но этот код вызывается каждые 5 миллисекунд (приблизительно), поэтому я подумал, что стоит спросить, есть ли обычный «чистый/эффективный» способ сделать это.
Как я это вижу, у меня есть четыре очевидных варианта:
При каждом вызове в java создайте объект "возврат ошибки" и передайте его в JNI. Если есть проблема, собственный код заполняет описание ошибки в этом объекте, а код Java проверяет его по возвращении. Поскольку ошибки не являются частым случаем, сборщик мусора создает много объектов, которые необходимо очистить, и 99,99% из них не нужны.
Подобно #1, создайте некоторый одиночный объект "возврата ошибки" в классе java, который передается при каждом вызове метода снова и снова. Проверяйте его в коде Java при каждом возврате на наличие ошибок. Мне это кажется изворотливым, но, может быть, это правильный вариант?
Создайте объект в собственном коде, который содержит описание ошибки, если применимо, и передайте его обратно в качестве возвращаемого значения в java. После вызова в java проверьте возврат на null. Это кажется менее расточительным, чем № 1, но кажется немного неудобным.
Просто создайте целочисленное возвращаемое значение в методе jni и передайте обратно целочисленное значение, соответствующее «выходному» значению собственного кода. Перечислите все возможные собственные состояния выхода на карте Java. Сравните возвращаемое значение с «0» и при необходимости найдите ошибку на этой карте. Это кажется более эффективным, чем другие, но кажется более неуклюжим, поскольку изменение собственного кода потребует от кого-то вернуться и обновить «таблицу ошибок».
Я чувствую, что упускаю что-то очевидное... есть ли гуру, который может дать какое-то понимание?
Спасибо!