Я хочу передать данные из Java в C ++ с помощью JNI call
.
Код C ++, который я хочу вызвать, - это вызов JNI внутри моей основной формы .cpp
.
Мне нужно загрузить библиотеку .so
моего приложения C ++ на Java,
как описывает C ++ Builder, этот .so
файл является ProjectOutput
(находится в library\lib\armeabi-v7a\
.
Я загружаю библиотеку так:
public class McaScanner {
//private static native void transmitScan(String barcode);
static {
System.loadLibrary("libProjectTest");
}
//other static functions
}
До того, как я добавил загрузку этой библиотеки, все работало нормально, и я мог вызывать код Java внутри своего кода C ++ через Delphi Native Interface
этого класса Java.
Но теперь, когда я вызываю любой метод этого Java-класса, я получаю EJNIFatal exception : "Invocation Error : method not found"
.
Если я прокомментирую loadLibrary()
, это сработает. Что является причиной этой проблемы?
Разве этот тип библиотеки не может быть загружен внутри кода Java?
РЕДАКТИРОВАТЬ:
Хорошо, как только я попытался загрузить внутри getInstance()
Я увидел проблему с загрузкой. "lib"
уже был добавлен до "libProjectTest"
, поэтому я не должен был добавлять его сам.
Но теперь я получаю сообщение об ошибке:
No implementation found for void com.scanner.McaScanner.transmitScan(java.lang.String) (tried Java_com_scanner_McaScanner_transmitScan and Java_com_scanner_McaScanner_transmitScan__Ljava_lang_String_2)
То есть, теперь приложение вылетает, когда до этого не было такой же ошибки.
Реализация моего вызова JNI в C ++ в com.embarcadero.ProjectTest
:
(Мой класс Java находится в com.scanner.McaScanner
)
extern "C"
JNIEXPORT void JNICALL Java_com_scanner_McaScanner_transmitScan(JNIEnv *env, jobject obj, jstring barcode) {}
РЕДАКТИРОВАТЬ:
Может быть проблема в том, что я пытаюсь загрузить библиотеку, которая уже используется в памяти?