- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 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 上,调用 CoCreateInstance
时出现错误 0x0x80040154
(REGDB_E_CLASSNOTREG
)。
这是一个 32 位应用程序,运行在 Windows 10 64 位(对于开发人员)和 Windows Server 2016 Datacenter 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
每个调用看起来都是正确的。
我应该在我的客户端配置中更改什么才能使其正常工作?
最佳答案
MSDN explains在“备注”部分下,此 DirectShow 过滤器应该如何参与 DirectShow 图形管道:
This filter acts as a wrapper for an audio device. To enumerate the audio devices available on the user's system, use the ICreateDevEnum interface with the audio renderer category (CLSID_AudioRendererCategory). For each audio device, the audio renderer category contains two filter instances. One of these corresponds to the DirectSound Renderer, and the other corresponds to the Audio Renderer (WaveOut) filter. The DirectSound instance has the friendly name "DirectSound: DeviceName," where DeviceName is the name of the device. The WaveOut instance has the friendly name DeviceName.
请注意,您通常不应该使用 CoCreateInstance
直接实例化过滤器,您正在做的事情。这是有充分理由的:它是一个包装对象,它通常需要将其绑定(bind)到特定音频输出设备的初始化上下文。通过直接初始化,您隐式地指示它使用默认设备。
在没有音频输出设备的系统上,过滤器将看不到任何设备,并且可能会在早期实例化步骤中发出故障,从而导致 COM 错误。您会看到 COM 注册,但缺少硬件和早期故障会触发一般 COM 错误,而不是特定于 API 的错误。
一般来说,您仍然应该更喜欢使用 ICreateDevEnum
接口(interface)(如 MSDN 推荐的那样)而不是 CoCreateInstance
。
关于c++ - 为什么 CoCreateInstance 在某些 Windows 上返回 REGDB_E_CLASSNOTREG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54772340/
try { // call to Com Method } catch (COMException e) { if (e.ErrorCode == 0x80040154) // REG
我正在尝试为 HBITMAP 加载 PNG。我找到了这个 post来自计算器。当我运行代码时,我得到 REGDB_E_CLASSNOTREG在 CoCreateInstance(CLSID_WICPn
我正在构建一个 GIS 应用程序,但每当我运行代码时都会出现此错误 System.Runtime.InteropServices.COMException was unhandled Retrievi
我遇到了 Virtualbox 问题 Callee RC: REGDB_E_CLASSNOTREG” (0x80040154) 突然间。问题始于 VirtualBox 4.3(我认为)。我升级到版本
我有一个 ATL 项目,我需要在 CComObjectRootEx::FinalConstruct 中执行各种初始化例程。出于演示目的,请考虑以下实现: HRESULT FinalConstruct(
在 winform 中使用 COM 引用时出现此错误。我尝试在 winform 中使用 Window Media Player COM,它工作正常。但是当我尝试与其他 COM dll 一起使用时出现此
我想从 LSIS OPC SERVER 获取数据。 LS Industrial提供了.dll和.cs库,但我可以注册dll或cs库。我不知道为什么。这是错误 enter image descripti
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in Microsoft.S
我有一个 ATL DLL,我正试图从 ATL Exe 中使用它。当我尝试在 DLL 中创建对象的实例时,它失败并显示错误 REGDB_E_CLASSNOTREG。我检查了注册表,可以看到对象已注册,包
我想使用 DSound Audio Render在我的一个应用程序中,所以我用 CoCreateInstance 加载它.这是一个小片段: #include #include #include
我正在尝试使用一个应用程序,该应用程序运行良好,我正在尝试编辑应用程序中的现有项目。单击编辑时出现以下错误, System.Runtime.InteropServices.COMException w
当我使用网站网址的互操作通过 C# 代码编写 Excel 文件时,会出现此错误。它在本地机器上运行得很好。将我的网站发布到 Azure 云基础服务器后。它不适用于网站网址。 如果我必须在 Azure
我的 mvc3 应用程序出现错误。 在我的应用程序中,我引用了 vb6 DLL,它是另一个程序的 DLL。 当我使用 VisualStudio 服务器开发调试我的应用程序时,一切正常,但我尝试将其部署
我真的被这个问题困住了,在谷歌上花了几个小时等我需要在这里问,因为我没有想法...... 使用 this例如我目前有这个: #include #include // get ATL's clien
我有一个 C# dll,我已经为 COM Interop 正确注册,并使 COM 可见。使用 cppbuilder,我导入了类型库,它生成了包装器类,现在我正尝试使用它来创建我的 C# 类的实例。但是
我想获取接口(interface) IBaseFilter 系统混音器,但出现错误REGDB_E_CLASSNOTREG 类未注册于: hr = pEndpoint->Activate(__uuido
当我尝试创建 COM 类的实例时,它抛出一个异常 类未注册(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG)) 请建议我该如何解决? 最佳答案 您需要确保所有程序
我正在尝试运行 COM.Scanner项目,但抛出以下异常: Retrieving the COM class factory for component with CLSID {9F8D4F16-0
我有一个扫描模块,它在我自己的 Windows 8.1 机器上运行良好,但在 Windows Server 2012 上的 IIS 上发布代码时,我遇到了以下错误。 Creating an insta
我安装了Visual Studio 2010,但是当我想创建新项目时,会发生此错误: 未注册的类(来自hresult:0x80040154(regdb_e_classnotreg)的异常) 我应该做什
我是一名优秀的程序员,十分优秀!