Здравствуйте, sprf, Вы писали:
S>Пишу программу под DirectShow.
S>Начинаю инициализацию СОМ
S>S> hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
S> hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (void**)&pGraph);
S>
S>CoInitializeEx() завершается успешно.
S>CoCreateInstance() возвращает ошибку regdb_e_classnotreg. GetLastError() непосредственно после вызова CoCreateInstance() возвращает — 1008 "Попытка ссылки на несуществующий маркер.
S>Операционка Win7 — 64. Среда VS-6.
S>В чем может быть причина?
Дело в том, что интерфейс IGraphBuilder является локальным (помечен словом local в IDL). Это означает, что данный интерфейс не может маршалиться между апартаментами. Вы пытаетесь создать объект, находясь в STA (COINIT_APARTMENTTHREADED). А все компоненты DirectShow предназначены для работы в MTA.
Вам надо поставить COINIT_MULTITHREADED в CoInitializeEx.