Я хочу использовать DSound Audio Render в одном из моих приложений, поэтому я загружаю его с CoCreateInstance .Вот небольшой фрагмент:
#include <iostream>
#include <strmif.h>
#include <uuids.h>
int main()
{
std::cout << "Start" << std::endl;
HRESULT hr = CoInitialize(NULL);
printf("CoInitialize = 0x%x\n", hr);
IBaseFilter* ptr = NULL;
hr = CoCreateInstance(CLSID_DSoundRender, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void**)&ptr);
printf("CoCreateInstance = 0x%x\n", hr);
ptr->Release();
CoUninitialize();
std::cout << "End" << std::endl;
std::cin.get();
}
Проблема в том, что в Windows, которую я использую для разработки своего приложения, оно работает хорошо, а hr
всегда 0x0
(S_OK
), но в Windowsмоего клиента выдает ошибку 0x0x80040154
(REGDB_E_CLASSNOTREG
) при вызове CoCreateInstance
.
Это 32-разрядное приложение, работающее в 64-разрядной версии Windows 10 (для разработчика) и в Windows Server 2016Центр обработки данных 64 бита (для продукта).
Я проверяю реестр, и соответствующая DLL (quartz.dll
) правильно зарегистрирована.Действительно, я получаю эти результаты на обеих Windows:
PS C:\Users\pierre> Get-ChildItem -Path "Registry::HKCR\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}"
Hive: HKCR\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}
Name Property
---- --------
InprocServer32 (default) : C:\Windows\System32\quartz.dll
ThreadingModel : Both
PS C:\Users\pierre> Get-ChildItem -Path "Registry::HKCR\WOW6432Node\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}"
Hive: HKCR\WOW6432Node\CLSID\{79376820-07D0-11CF-A24D-0020AFD79767}
Name Property
---- --------
InprocServer32 (default) : C:\Windows\SysWOW64\quartz.dll
ThreadingModel : Both
PS C:\Users\pierre> dir C:\Windows\System32\quartz.dll
Répertoire : C:\Windows\System32
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 15/09/2018 09:29 1639424 quartz.dll
PS C:\Users\pierre> dir C:\Windows\SysWOW64\quartz.dll
Répertoire : C:\Windows\SysWOW64
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 15/09/2018 09:29 1470464 quartz.dll
Я также использовал procmon.exe
, и все вызовы выглядят правильно.
Что я должен изменить в конфигурациимоего клиента, чтобы заставить его работать?