2016-10-26 2 views
0

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

Примечания:

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

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

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

Если вам нужно больше помочь, дайте мне знать ...

+0

спасибо за вашу помощь –