0

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

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

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

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

当 CoCreateInstance 挂起时,它会卡在 WaitForMultipleObjectsEx 上,如下所示: 调用堆栈 2

4

1 回答 1

0

就像西蒙在评论中所说的那样,改变CLSID_FilterGraphCLSID_FilterGraphNoThread消除僵局。

于 2021-04-12T09:55:39.490 回答