我正在使用Visual Studio 2010,并在C#中编码.我有一个我在项目中使用的第三方dll.当我尝试使用特定方法时,在看似随机的场合,程序只会崩溃,没有异常抛出.会议结束.有什么方法可以追踪发生的事情吗?
我正在编写这个库,它通过Media Foundation框架在C++/CLI中实现一些基本的音频播放器功能,这些功能将由托管代码使用.我可以播放音频,停止,暂停等等.对于不熟悉Media Foundation的任何人,媒体会话都会发布您可以处理通知的事件.这是通过使用IMFAsyncCallback对象在会话对象上调用BeginGetEvent来完成的.IMFAsyncCallback定义了应该实现的方法Invoke(IMFAsyncResult)来处理事件.发生事件时,调用方法由工作线程上的会话对象调用,该工作线程具有可以查询事件信息的IMFAsyncResult对象.此结果对象由事件线程创建并拥有.
在我的Invoke实现中,每当我尝试用我传递的IMFAsyncResult对象做任何事情(包括只调用QueryInterface或其他东西)时,我都会得到一个System.AccessViolationException.我实现IMFAsyncCallback的对象是在CRT堆上分配的基本C++类(未托管),并且事件发布在也在CRT堆上分配的会话对象拥有的线程上.
可能导致此异常的原因是什么?
为什么我从普通旧C++实现的代码中抛出.NET托管异常?这就是当你有一个混合模式组件时会发生什么?
.net c++-cli access-violation visual-c++ ms-media-foundation