从 OnThreadCreate

问题描述

我对 CoCreateInstance 有一个问题,它在被调用后永远不会返回。它从 CSourceStream::OnThreadCreate

的重写方法调用

我认为问题在于我尝试在单独的线程中使用 COM,但我不确定。如何在另一个线程中使用 COM?这是调用堆栈以及我无论如何调用函数的方式。我检查了 CoInitialiseEx 返回 S_FALSE,所以 com 正在该线程上运行。

Call Stack

HRESULT hr = CoCreateInstance(CLSID_Filtergraph,NULL,CLSCTX_INPROC_SERVER,IID_PPV_ARGS(&pGraph));

我发现如果我在另一个在同一线程上运行的方法 (CSourceStream::FillBuffer) 中使用 CoCreateInstance,它可以工作,但我不知道为什么。

当 CoCreateInstance 挂起时,它卡在 WaitForMultipleObjectsEx 上,如下所示:

Call stack 2

解决方法

就像 Simon 在评论中所说,将 CLSID_FilterGraph 更改为 CLSID_FilterGraphNoThread 消除了僵局。