Re: CoCreateInstance - regdb_e_classnotreg
От: john_silver  
Дата: 17.04.12 10:22
Оценка: 6 (1)
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.