Отслеживайте ход записи с помощью IMAPI 2.0 и передавайте обновления в Java

Я создал DLL, используя IMAPI 2.0 с C ++ для записи DVD RW. В настоящее время я вызываю эту DLL из Java. Как я могу получить непрерывное обновление записи от DLL до Java? Могут ли непрерывные обновления передаваться через dll в Java?
Пожалуйста, помогите в вышеуказанных запросах.

0

Решение

Я должен искать код (который будет довольно длинным), но можно передать указатель функции на статический метод Java через JNI в вашу C ++ DLL. Этот указатель на функцию можно использовать для передачи обновлений процесса записи в ваше Java-приложение.

Вот что ты делаешь:

  1. Добавьте указатель на функцию C ++, которую вы вызываете из Java

  2. (в C ++) Получить класс из DDiscFormat2DataEvents и использовать функцию Advise(..) из DDiscFormat2DataEvents интерфейс для получения уведомлений о процессе записи (см. функцию Update из DDiscFormat2DataEvents интерфейс).

  3. Вы должны запросить интерфейс IConnectionPointContainer а потом DDiscFormat2DataEvents от твоего IDiscFormat2Data объект для того, чтобы иметь возможность использовать функцию Advise(..),

  4. Из этого Update Функция, которую вы можете вызвать функцией обратного вызова, которая позволяет передавать информацию о прогрессе в ваше Java-приложение.

Заметки:

  • Вызов «обратных вызовов Java» из C ++ безопасен только до тех пор, пока Java вызывает функцию C ++, которая использует обратный вызов только из этой функции (или до тех пор, пока эта функция выполняется). Все другие сценарии приводят к серьезным сбоям виртуальной машины Java … Я никогда не нашел причину этого, но я ожидаю, что указатель на функцию каким-то образом станет недействительным, если JNI очищает вещи после вызова функции C ++.

  • Производный класс должен реализовать все функции DDiscFormat2DataEvents, IDispatch, а также IUnknown интерфейс для правильной работы.

  • Вы даже можете использовать этот механизм обратного вызова, чтобы прервать запись …

Если вам нужна дополнительная помощь, дайте мне знать …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]