You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

UWP应用调用Wirecast COM组件报错80040154:类未注册

解决UWP调用Wirecast COM组件时的REGDB_E_CLASSNOTREG错误

嘿,这个问题我之前帮朋友排查过类似的,咱们一步步拆解解决:

首先,先明确这个80040154 (REGDB_E_CLASSNOTREG)错误的核心原因:要么是Wirecast的COM组件没正确注册,要么是UWP的沙箱限制导致无法访问桌面级的COM组件,还有可能是位数不匹配。

下面是具体的排查和解决步骤:

1. 先确认Wirecast的COM组件已正确注册

  • 首先确保Wirecast是完整安装的,安装过程中如果有“为所有用户注册组件”的选项,一定要勾选。
  • 打开管理员权限的命令提示符,运行这条命令检查CLSID的注册情况:
    reg query HKEY_CLASSES_ROOT\CLSID\{A416C15B-A073-4994-8DB5-87527A41B2FA}
    
    如果命令返回找不到项,说明组件没注册。这时候可以尝试重新安装Wirecast,或者手动注册对应的DLL:找到Wirecast安装目录里的COM组件DLL(比如WirecastSDK.dll,具体文件名需要看Wirecast的文档),然后运行:
    regsvr32.exe "C:\Program Files\Wirecast\你的组件文件名.dll"
    
    注意:如果Wirecast是64位的,要使用C:\Windows\System32\regsvr32.exe;如果是32位,用C:\Windows\SysWOW64\regsvr32.exe

2. 处理UWP沙箱的访问限制

UWP默认运行在沙箱里,直接调用桌面级的COM组件会有很多权限限制,Wirecast的COM组件大概率是桌面级的,所以推荐用**桌面桥(Desktop Bridge)**的方式间接调用:

  • 在你的解决方案里添加一个桌面控制台/WinForms/WPF项目作为辅助进程,这个进程拥有完全系统权限,可以正常调用Wirecast的COM API。
  • 在UWP项目里使用FullTrustProcessLauncher API启动这个辅助进程,然后通过命名管道、TCP或者其他IPC方式和辅助进程通信,传递需要调用的指令和接收结果。
  • 别忘了在UWP的Package.appxmanifest里添加桌面桥的相关声明:
    <Package ... xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
              xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
      ...
      <Capabilities>
        <rescap:Capability Name="runFullTrust" />
      </Capabilities>
      <Extensions>
        <desktop:Extension Category="windows.fullTrustProcess" Executable="辅助进程的相对路径\你的辅助进程.exe" />
      </Extensions>
    </Package>
    

3. 检查位数匹配

  • 确认你的UWP项目的目标平台位数和Wirecast的安装位数一致:如果Wirecast是64位的,UWP项目要设置为x64;如果是32位,设置为x86。不要用Any CPU,否则可能会出现位数不匹配导致的组件找不到问题。

4. 确认Wirecast SDK对UWP的支持

虽然Wirecast建议调用对应代码,但最好去查一下他们的官方文档,确认SDK是否明确支持UWP环境。有些桌面COM组件并没有做UWP适配,这种情况下只能通过桌面桥的方式来实现交互。

内容的提问来源于stack exchange,提问作者Mateusz Sadowski

火山引擎 最新活动