COM组件DLL引用时出现检索组件错误

Posted liuniublogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了COM组件DLL引用时出现检索组件错误相关的知识,希望对你有一定的参考价值。

前情提要:

  市面上有一套系统软件,其中某个功能的程序是使用COM组件开发的,我希望使用它的这个功能,所有我引用了他的COM组件DLL.

但是程序执行时出现了一个错误,错误如下图:

 技术分享图片

 

这个错误一般都是我们引用的COM组件没有注册引起的。但是当我使用regedit命令去注册组件时,总是无法注册报了一个错误

 技术分享图片

 

使用regsvr32.dll注册时出现这个问题。

我把这个程序拿到另一台电脑上使用时,没有报错,能够正常的运行,那台点脑安装了原版的程序。所以没有报这个错误。

因为单独注册dll没有成功,我只能采用这种安装原版程序的方式来使我的程序可以正常执行使用。

但是当我在我电脑上安装dll原版程序来完成组件注册的任务时,我运行程序时还是无法正常执行。

各中找原因

1.查找注册COM组件dll的方法,但是都无法进行注册。

2.安装原版程序,卸了装装了卸就是不行。

3.使用错误信息中的Guid在注册表中进行查找,发现能正常使用的电脑上的注册文件和不能使用的组测文件是同一个组测文件相同的。

在我快崩溃了的时候,在某个地方突然发现32位和64位程序使用。然后我查看一下我的程序,发现是x64的程序,不是x86也不是any CPU。我将程序属性设置位x86编译,再次运行时发现

程序可以正常使用了。

这里小伙伴们可能有疑问,那台可以使用的电脑上的程序不也是64位的,其实不是的,可以正常使用的电脑上的程序时any CPU编译的,后台我再自己机器上尝试解决问题时,将程序改为x64了。

所以当我在自己机器上注册好组件时,我的程序不满足32位的要求。

程序正常使用要满足两个条件:

1.通过安装原版程序进行dll组件注册

2.程序要能兼容32位(因为这个dll组件时32位的)虽然系统是64位的,但是我引用的dll要求32位。

 

以上是关于COM组件DLL引用时出现检索组件错误的主要内容,如果未能解决你的问题,请参考以下文章

检索COM类工厂中CLSID为{000245000-0000-0000-C000-000000000046的组件时失败,出现错误以下80040154

将输入字段聚焦在React组件中 - 尝试创建ref时出现类型错误

导出excel的程序,COM 类工厂中 CLSID 的组件时失败.错误: 80040154

在 .vue 组件中编译方法时出现语法错误

尝试在 Nuxt 中将数据从组件传递到页面时出现错误消息

从系统(SysWOW64)目录外部注册 32 位 COM 时出现问题