.NET 0x80040154 (REGDB_E_CLASSNOTREG):正在为具有 CLSID {XXXX} 的组件检索 COM class 工厂

.NET 0x80040154 (REGDB_E_CLASSNOTREG): Retrieving the COM class factory for component with CLSID {XXXX}

我正在尝试 运行 COM.Scanner 项目,但引发了以下异常:

Retrieving the COM class factory for component with CLSID {9F8D4F16-0F61-4A38-98B3-1F6F80F11C87} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

好像Interop.CoreScanner是一个.NET程序集我用regasm注册了COM对象,但是还是报错。

我是来看这篇文章的 post 但是 none 的回答解决了问题。

这是Corflags的信息:

Microsoft (R) .NET Framework CorFlags Conversion Tool.  Version  4.6.81.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 0x1
ILONLY    : 1
32BITREQ  : 0
32BITPREF : 0
Signed    : 0

带有regasm/regfile选项的生成的.reg文件是:

REGEDIT4

[HKEY_CLASSES_ROOT\CLSID\{9F8D4F16-0F61-4A38-98B3-1F6F80F11C87}\InprocServer32]
"Class"="CoreScanner.CCoreScannerClass"
"Assembly"="Interop.CoreScanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///D:/Github/miscelaneas/COM.Scanner/libs/Interop.CoreScanner.dll"

[HKEY_CLASSES_ROOT\CLSID\{9F8D4F16-0F61-4A38-98B3-1F6F80F11C87}\InprocServer32.0.0.0]
"Class"="CoreScanner.CCoreScannerClass"
"Assembly"="Interop.CoreScanner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///D:/Github/miscelaneas/COM.Scanner/libs/Interop.CoreScanner.dll"

环境:

问题

seems that the missing component is installed together with Motorolas EMDK SDK。安装 SDK 应该可以解决您的问题。

注册互操作程序集不需要任何进一步的操作,因为互操作程序集只是一个包含 COM 组件类型定义的库,因此您可以使用静态类型和早期绑定来编译 C# 代码。实际需要注册的是底层 COM 组件。如果 COM 组件是用 .NET 编写的,则仅当实际 COM 组件时才使用 regasm.exe 进行注册。否则你需要使用经典的regsvr32.exe(或使用组件供应商的安装程序)。