您正在使用 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。或者它被设计为仅通过在客户端程序中使用清单才能正确运行。等等,这可能会很快变得复杂。
如果这些故障排除提示无法帮助您,那么您将需要供应商的帮助。他们会确切地知道需要什么,我们只能在这里猜测。