Ошибка фильтра 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 в моем коде.