gpt4 book ai didi

c# - 调用 .dll 的构造函数会抛出 COMException

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:02 24 4
gpt4 key购买 nike

我想找出一个dll 的作用,所以我将它添加到一个c# 项目中。当我的代码创建一个包含在 dll 中的类的实例时,我收到此错误消息:

Retrieving the COM class factory for component with CLSID {D5BED98C-C4EE-4D41-A624-6CFD9106F31B} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

我已经将平台目标更改为 x86。

我也尝试注册 dll,但它似乎没有入口点。dll 内容不可执行,我错过了什么?

编辑:这是我的“代码”:

            this.acfg = new ACFG_Info();

提前致谢!

最佳答案

您正在使用 COM 组件。 COM 自动执行许多操作,您在这里遇到问题的功能是它能够在磁盘上找到 DLL、加载它、找到实现您创建的类的代码并创建它的实例。听起来很简单,.NET 确实让它看起来很简单,但事实并非如此。找到正确的 DLL 绝非易事。

它很早就崩溃了,它还没来得及找到 DLL。为了找到 DLL,COM 在注册表中查找有关该类的详细信息。它所知道的只是一个数字,一个唯一的标识类的数字。简称为CLSID。当您使用 new 运算符创建该类的实例时,该数字已编译到您的程序中。错误消息会告诉您该数字的样子。它是一个 guid,否则与 System.Guid 类完全相同。

通过使用 SysInternals 的 ProcMon 实用程序,查看 COM 如何查看注册表的一种非常好的方法。它记录了程序如何使用winapi访问注册表。 ProcMon 生成的跟踪中通常包含大量信息,通过在跟踪中搜索您在错误消息中看到的数字来定位感兴趣的位。您会看到它正在搜索注册表项,但没有找到。这最终会使您的程序在“类未注册”错误代码上爆炸。

“注册”类是一个安装过程,在 COM 组件可用之前需要完成一次。提供 COM 服务器的供应商通常会为您提供一个安装程序,因此这会得到妥善处理。它往往很简单,通常运行 Regsvr32.exe 就足够了。但这在现代 64 位操作系统上不再简单,您会遇到很多麻烦。就像忘记运行提升的命令提示符(使用“以管理员身份运行”)。或者使用错误版本的 Regsvr32.exe,您需要 c:\windows\syswow64\regsvr32.exe,该程序的 32 位版本。

或者安装过程比较复杂,COM dll可能有依赖的DLL需要先安装才能正常工作。或者它实际上是一个进程外服务器,一个需要通过使用/regserver 命令行选项运行它来注册的 exe。或者它被设计为只能通过在客户端程序中使用 list 才能正确运行。等等,这很快就会变得复杂。

如果这些故障排除提示无法为您提供任何帮助,那么您将需要供应商的帮助。他们会确切地知道需要什么,我们在这里只能猜测。

关于c# - 调用 .dll 的构造函数会抛出 COMException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com