.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"
环境:
- OS: Windows 10 (x64)
- Visual Studio 2015
问题
- 闻起来好像注册表中缺少条目,但我不知道是哪一个。
- 如果我的方法正确,为什么
regasm
无法生成丢失的注册表项?
它seems that the missing component is installed together with Motorolas EMDK SDK。安装 SDK 应该可以解决您的问题。
注册互操作程序集不需要任何进一步的操作,因为互操作程序集只是一个包含 COM 组件类型定义的库,因此您可以使用静态类型和早期绑定来编译 C# 代码。实际需要注册的是底层 COM 组件。如果 COM 组件是用 .NET 编写的,则仅当实际 COM 组件时才使用 regasm.exe
进行注册。否则你需要使用经典的regsvr32.exe
(或使用组件供应商的安装程序)。
我正在尝试 运行 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"
环境:
- OS: Windows 10 (x64)
- Visual Studio 2015
问题
- 闻起来好像注册表中缺少条目,但我不知道是哪一个。
- 如果我的方法正确,为什么
regasm
无法生成丢失的注册表项?
它seems that the missing component is installed together with Motorolas EMDK SDK。安装 SDK 应该可以解决您的问题。
注册互操作程序集不需要任何进一步的操作,因为互操作程序集只是一个包含 COM 组件类型定义的库,因此您可以使用静态类型和早期绑定来编译 C# 代码。实际需要注册的是底层 COM 组件。如果 COM 组件是用 .NET 编写的,则仅当实际 COM 组件时才使用 regasm.exe
进行注册。否则你需要使用经典的regsvr32.exe
(或使用组件供应商的安装程序)。