System.AccessViolationException de código não gerenciado?

Estou escrevendo esta biblioteca que implementa alguns recursos básicos do reprodutor de áudio em C ++ / CLI por meio da estrutura do Media Foundation que será consumida pelo código gerenciado. Eu posso reproduzir áudio, parar, pausar, etc. Para quem não está familiarizado com o Media Foundation, a sessão de mídia publica eventos que você pode manipular para notificações. Isso é feito chamando BeginGetEvent no objeto de sessão com um objeto IMFAsyncCallback. O IMFAsyncCallback define o método Invoke (IMFAsyncResult) que você deve implementar para manipular os eventos. Quando um evento ocorre, o método de chamada é chamado pelo objeto de sessão em um thread de trabalho com um objeto IMFAsyncResult que você pode consultar para obter as informações do evento. Este objeto de resultado é criado e de propriedade do encadeamento de eventos.

Na minha implementação do Invoke, sempre que tento fazer alguma coisa (incluindo apenas chamar QueryInterface ou algo assim) com o objeto IMFAsyncResult que recebi, recebo uma System.AccessViolationException. O objeto que tenho implementado IMFAsyncCallback é uma classe C ++ básica (não gerenciada) alocada no heap CRT e os eventos são postados em um encadeamento pertencente ao objeto de sessão também alocado no heap CRT.

O que poderia estar causando essa exceção?

Por que estou recebendo uma exceção gerenciada pelo .NET lançada do código implementado em C ++ antigo simples? É exatamente isso que acontece quando você tem uma montagem de modo misto?

questionAnswers(2)

yourAnswerToTheQuestion