У меня есть программное обеспечение для распознавания изображений, работающее для создания ввода для моей игры. Я обнаруживаю движения через openCV в C++, однако ограничение состоит в том, что сама игра должна быть записана в java.I хотелось бы запросить состояние процесса openCV, чтобы получить некоторые объекты для ввода. Я хотел сделать это через JNI-запросы на мой текущий процесс, но все примеры JNI просто называют функции библиотеки, а не запущенным процессом. так это возможно через JNI, или я вынужден использовать сокеты для этого?JNI для запуска процесса вместо использования библиотеки
ответ
Вы можете вызвать JVM из C++, инициализировать компоненты на основе openCV, а затем запустить Java-код.
Основы вызова объясняются here, with a sample snippet. Например, для запуска Java-компонента с помощью статического метода вы можете посмотреть код на the end of this SO answer.
Наконец, для вызова вашей функции мониторинга C++ вы должны использовать собственный код в своем java-коде и зарегистрировать для него функцию C++. Эта функция может затем получить доступ ко всему, что вы подготовили во время инициализации. Пример:
В Java:
class MyTest {
...
public native void doMonitor(); // to be supplied in C++ trhough JNI
}
В C++, где-то в коде инициализации (перед запуском кода Java), вы должны зарегистрировать собственный метод:
jclass cls2 = env->FindClass("MyTest");
JNINativeMethod methods[] { { "doMonitor", "()V", (void *)&doMonitorCPP } };
if(env->RegisterNatives(cls2, methods, 1) < 0)
{
if(env->ExceptionOccurred())
cerr << " OOOOOPS: exception when registreing natives" << endl;
else
cerr << " ERROR: problem when registreing naives" << endl;
}
doMonitor()
бы например, например:
void doMonitorCPP(JNIEnv*e, jobject o) {
std::cout << "C++callback activated" << std::endl;
// do what you need to do with openCV.
}
Удивительный мужчина, спасибо тонну! –
- 1. UnsatisfiedLinkError для JNI библиотеки
- 2. Использование JNI для загрузки другой библиотеки JNI?
- 3. Конфигурация Eclipse для запуска проекта JNI
- 4. Запуск процесса для запуска
- 5. хорошая jni-структура для использования?
- 6. Статические библиотеки и JNI
- 7. Упаковка Библиотеки JNI
- 8. Jni и общие библиотеки
- 9. JNI UnsatisfiedLinkError зависимые библиотеки
- 10. Преимущества использования JNA для выполнения процесса
- 11. вызов jni-метода из другой библиотеки jni
- 12. NDK JNI недостающие библиотеки
- 13. HEAP-память для запуска процесса
- 14. использовать JNI для запуска JVM Builder C++
- 15. Каковы преимущества [Diagnostics.Process] Start() для запуска процесса?
- 16. Проект Android Studio для библиотеки JNI
- 17. Запущен для загрузки общей библиотеки JNI
- 18. JNI GetMethodID для сторонней библиотеки возвращает NULL
- 19. Android JNI с dlopen() вместо system.loadlib
- 20. Получить PID процесса Runtime с использованием JNI
- 21. Как использовать фрагмент для запуска экономии Smartlock вместо использования Activity
- 22. Связывание статической библиотеки в JNI
- 23. Использование Docker для запуска процесса сборки
- 24. Неудачная ошибка связи при загрузке библиотеки JNI
- 25. WP-кнопка для запуска медиа-библиотеки
- 26. Загрузка библиотеки JNI в другую библиотеку JNI сбой
- 27. Микростратегия запуска периодического процесса
- 28. Нужно пересечь компилировать библиотеки JNI в windows для запуска в linux с помощью cygwin
- 29. Ограничение запуска процесса
- 30. Как использовать JNI для запуска JVM в приложении-конструкторе C++
Я действительно не понимаю, что «JNI для моего процесса» меня ans - если вы хотите выполнить межпроцессный вызов, вам нужно использовать IPC (например, сокеты). Похоже, у вас есть хороший ответ, так что, может быть, вы можете попросить ответчика изменить свой вопрос, чтобы он стал яснее? –