MStet Ответов: 1

Что не так с этим вызовом connectdirect ()?


В реализации DirectShow на языке C++ я добавил два графика в Диспетчер графиков (проверки ответов удалены для простоты). Когда я пытаюсь соединить их с помощью ConnectDirect, и я получаю "E_POINTER недопустимый указатель в результате". Что я делаю не так?

	CComPtr<IBaseFilter> peconsCX3RDKwithOV5640;
	hr = peconsCX3RDKwithOV5640.CoCreateInstance(CLSID_econsCX3RDKwithOV5640);
	hr = pGraph->AddFilter(peconsCX3RDKwithOV5640, L"e-con's CX3 RDK with OV5640");

	CComPtr<IBaseFilter> pAVIDecompressor;
	hr = pAVIDecompressor.CoCreateInstance(CLSID_AVIDec);
	hr = pGraph->AddFilter(pAVIDecompressor, L"AVI Decompressor");

// ConnectDirect give an Invalid pointer response
	hr = pGraph->ConnectDirect(GetPin(peconsCX3RDKwithOV5640, L"Capture"), GetPin(pAVIDecompressor, L"XForm In"), NULL);


Что я уже пробовал:

Я использовал GraphEdit для этой модели,и она работает правильно. Я проверил правильность обозначений pin-кода и попытался поставить подчеркивание (_) между XForm и In (XForm_In). Я проверил и перепроверил синтаксис и не вижу своей ошибки.

1 Ответов

Рейтинг:
0

KarstenK

COM-это weired, но ошибки помогают вам. Ваше сообщение означает, что входной указатель является недопустимым или неправильным для желаемого действия.

Вы уверены, что все звонки до этого были в порядке? Мне не нравится эта линия

hr = pGraph->AddFilter(peconsCX3RDKwithOV5640,"e-con's CX3 RDK with OV5640");
И разделить ConnectDirect вызова для проверки GetPin звонки в первую очередь. Может быть, они и есть источник вашей проблемы.

Отделите код и проверьте все результаты.