Я создал dll, используя IMAPI 2.0 с C++ для записи DVD RW. В настоящее время я вызываю эту DLL из Java. Как я могу получить непрерывное обновление записи с dll на Java? Можно ли передавать непрерывные обновления через dll на Java? Пожалуйста, помогите в вышеуказанных запросах.Мониторинг прогресса записи с использованием IMAPI 2.0 и передачи обновлений в Java
ответ
Мне нужно выкопать код (который будет длиться долго), но можно передать указатель на статический метод Java через JNI на вашу C++ DLL. Этот указатель функции может использоваться для передачи обновлений процесса записи в ваше Java-приложение.
Вот что вы делаете:
Добавить указатель на функцию к вашему C++ функции, которые вы звоните из Java
(в C++) Выведите класс от
DDiscFormat2DataEvents
и использовать функциюAdvise(..)
интерфейсаDDiscFormat2DataEvents
для получения уведомлений о процессе записи (см. функциюUpdate
интерфейсаDDiscFormat2DataEvents
).Вы должны запросить интерфейс
IConnectionPointContainer
, а затемDDiscFormat2DataEvents
от вашегоIDiscFormat2Data
объекта для того, чтобы иметь возможность использовать функциюAdvise(..)
.С помощью функции
Update
вы можете вызвать функцию обратного вызова, которая позволяет передавать информацию о ходе работы в ваше Java-приложение.
Примечания:
Calling «Java обратных вызовов» из C++ только в безопасности, пока Java вызывает функцию C++, которая использует функцию обратного вызова только из этой функции (или до тех пор, как эта функция выполняет). Все остальные сценарии приводят к плохим сбоям виртуальной машины Java ... Я никогда не нашел причины этого, но я ожидаю, что каким-то образом указатель функции станет недействительным, если JNI очистит ситуацию после вызова функции C++.
Производный класс должен реализовать все функции интерфейса в
DDiscFormat2DataEvents
,IDispatch
иIUnknown
работать правильно.Вы можете даже использовать этот механизм обратного вызова, чтобы прервать ожог ...
Если вам нужно больше помочь, дайте мне знать ...
спасибо за вашу помощь –