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