Ошибка фильтра DirectShow "Класс не зарегистрирован"

Используя следующий код в моем проекте cpp/win32, я получаю сообщение об ошибке "класс не зарегистрирован"

hr = CoCreateInstance(CLSID_PIAsyncFile, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void**) &ppF);

if (SUCCEEDED(hr)) {

  hr = pGraph->AddFilter(ppF, L"My Async Source (File)");

}

Это не так, так как мой фильтр отлично работает под GraphEdit, и я также могу найти его, используя перечисляющие имена IFilterMapper2. Я также могу успешно привязать к объекту из фильтров прямого показа.

hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&ppF);

Итак, что не так с CoCreateInstance?

PS: это 32-битный фильтр, который зарегистрирован под 64-битной системой Windows 7. В реестре я также могу найти фильтр под sysWOW3264 (зеркальный реестр для 32-битных приложений Windows, работающих на 64-битных Windows).

Вы также можете обратиться и найти исходный код в моем посте codeproject по адресу http://www.codeproject.com/Messages/4603967/Class-not-registered-error.aspx

1 ответ

Решение

Благодаря Роману Р. проблема заключалась в неправильном объявлении CLSID в моем коде.

Другие вопросы по тегам