我有一个Delphi 6 DirectShow应用程序,通过套接字与Skype交换音频。我在运行DirectShow过滤器链时,由Filter Graph加载的一个DLL启动的其中一个线程中出现间歇性访问冲突。正如我在之前的SO帖子中发现的,在另一个SO成员的帮助下,出现故障的线程似乎是由Microsoft Audio Compression Manager(msacm32.dll)启动的:
How can I tell what DLL started a thread and what address space a DLL owns for an external DLL?
如果我不使用压缩,则不会发生错误。这是有道理的,因为我的过滤器图只在使用我的应用程序中的设置实际打开压缩时才加载ACM DLL。因此,不会加载** msacm32.dll *。但是,如果我不通过套接字与Skype交换音频,我似乎没有获得访问冲突,即使正在使用压缩。使问题变得复杂的是,如果我有与Skype连接的套接字,但我从不向Skype发送任何数据或通过这些套接字从它接收任何数据,我仍然获得访问冲突。我通过注释掉套接字发送和接收调用的代码来确定这一点,并注意到我仍然有AV。但是,如果我根本没有通过套接字连接到Skype,那么AV似乎不会发生。我说“似乎”,因为几个小时的测试表明,但这当然不是证明。
注意:AV是间歇性的。它并不是每次都会发生,但如果没有发生这种情况,我就无法连续进行超过5次试验。
在DirectShow应用程序中使用ACM时,是否曾有过获取访问冲突的经验?如果是这样,原因是什么,你是如何解决它的?