System.AccessViolationException del código no administrado?

Estoy escribiendo esta biblioteca que implementa algunas características básicas del reproductor de audio en C ++ / CLI a través del marco de Media Foundation que será consumido por el código administrado. Puedo reproducir audio, detener, pausar, etc. bien. Para cualquiera que no esté familiarizado con Media Foundation, la sesión de medios publica eventos que puede manejar para notificaciones. Esto se hace llamando a BeginGetEvent en el objeto de sesión con un objeto IMFAsyncCallback. IMFAsyncCallback define el método Invoke (IMFAsyncResult) que debe implementar para controlar los eventos. Cuando se produce un evento, el objeto de sesión llama al método de invocación en un hilo de trabajo con un objeto IMFAsyncResult que puede consultar para obtener la información del evento. Este objeto de resultado es creado y propiedad del hilo del evento.

En mi implementación de Invoke, cada vez que intento hacer algo (que incluye simplemente llamar a QueryInterface o algo) con el objeto IMFAsyncResult que se me pasa, obtengo una excepción System.AccessViolationException. El objeto que tengo implementando IMFAsyncCallback es una clase básica de C ++ (no administrada) asignada en el montón CRT y los eventos se publican en un subproceso propiedad del objeto de sesión también asignado en el montón CRT.

¿Qué podría estar causando esta excepción?

¿Por qué recibo una excepción administrada .NET generada desde un código que se implementa en C ++ antiguo? ¿Es eso exactamente lo que sucede cuando tienes un conjunto de modo mixto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta