System.AccessViolationException из неуправляемого кода?

Я пишу эту библиотеку, которая реализует некоторые базовые функции аудиоплеера в C ++ / CLI через среду Media Foundation, которая будет использоваться управляемым кодом. Я могу нормально проигрывать аудио, останавливаться, останавливаться и т. Д. Для тех, кто не знаком с Media Foundation, сеанс мультимедиа публикует события, которые можно обрабатывать для уведомлений. Это делается путем вызова BeginGetEvent для объекта сеанса с объектом IMFAsyncCallback. IMFAsyncCallback определяет метод Invoke (IMFAsyncResult), который вы должны реализовать для обработки событий. Когда происходит событие, метод invoke вызывается объектом сеанса в рабочем потоке с объектом IMFAsyncResult, который можно запросить для получения информации о событии. Этот результирующий объект создается и принадлежит потоку событий.

В моей реализации Invoke всякий раз, когда я пытаюсь что-то сделать (включая простой вызов QueryInterface или что-то еще) с передаваемым мной объектом IMFAsyncResult, я получаю исключение System.AccessViolationException. Реализуемый мной объект IMFAsyncCallback - это базовый класс C ++ (не управляемый), размещенный в куче CRT, а события публикуются в потоке, принадлежащем объекту сеанса, также размещенному в куче CRT.

Что может быть причиной этого исключения?

Почему я получаю исключение, управляемое с помощью .NET, из кода, который реализован на старом простом C ++? Это именно то, что происходит, когда у вас сборка смешанного режима?

Ответы на вопрос(0)

Ваш ответ на вопрос