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