У меня следующий COM-вызов:
IMFTransform* pMFT = NULL;
HRESULT hr = CoCreateInstance(CLSID_VideoProcessorMFT, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pMFT));
На моей машине для разработки этот вызов CoCreateInstance
завершается успешно. Однако при развертывании этого на моем старом компьютере Windows 7 вызов CoCreateInstance
завершается неудачно, и я не знаю почему. Вот как я отображаю ошибку:
_com_error err(hr);
LPCTSTR hrErrMsg = err.ErrorMessage();
WCHAR msg[MAX_PATH];
StringCbPrintf(msg, sizeof(msg), L"HRESULT=0x%X, %s", errContext, hrErr, hrErrMsg);
MessageBox(hwnd, msg, L"Error", MB_ICONERROR);
И вот ошибка, которую я получаю в этом окне сообщения:
HRESULT=0x80040154, Class not registered
То есть класс COM для Video Процессор MFT не зарегистрирован. Я вижу, что CLSID_VideoProcessorMFT
определяется как:
EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82);
Это скрытый GUID 88753B26-5B24-49bd-B2E7-0C445C78C982
. Я понимаю, что классы COM зарегистрированы в реестре Windows с ключом, содержащим этот GUID. Используя редактор реестра на моем компьютере разработчика, я вижу ключ:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{88753B26-5B24-49bd-B2E7-0C445C78C982}
, и этот ключ имеет значение по умолчанию %SystemRoot%\System32\msvproc.dll
, относящееся к пути к файлу C:\Windows\System32\msvproc.dll
, который существует.
На моем старом компьютере Windows 7 этот ключ в реестре не существует - как и ожидалось, учитывая ошибку «Класс не зарегистрирован». И нет файла в C:\Windows\System32\msvproc.dll
. Но здесь тропа становится холодной. Я не знаю, что должно регистрировать этот класс в реестре, и почему он не работает на моей старой машине Windows 7.
Возможные выводы:
- Я должен зарегистрировать видеопроцессор MFT самостоятельно. Тем не менее, документы не предлагают этого, и я не знаю, как бы я это сделал.
- Windows 7 не поддерживает видеопроцессор MFT. Но документы не дают никаких указаний на это. В самом деле, они говорят, что «Media Foundation требует Windows Vista или более поздней версии», который должен включать мою машину Windows 7.
- Я загружаю MFT видеопроцессора неправильно. Есть ли более независимый от системы способ его загрузки?
Какой из этих выводов правильный? Можно ли загрузить видеопроцессор MFT на Windows 7? Если да, то как?