类未注册错误

Aru*_*run 15 com dll 64-bit 32-bit visual-studio-2012

在64位计算机上从Visual Studio 2012运行应用程序,显示以下错误消息:

检索具有CLSID {F2D4F4E5-EEA1-46FF-A83B-A270C92DAE4B}的组件的COM类工厂由于以下错误而失败:80040154未注册类(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG))

我在visualstudio中使用Inventor packandgo dll库.

任何人都知道错误是什么?

小智 32

我的问题和解决方案

  1. 我有一个32位的第三方DLL,我已经在2008 R2机器上安装了64位.

  2. 我有一个在.net 4.5框架中创建的wcf服务,它调用32位第三方dll进程.现在我已经构建了属性集来定位'任何'cpu并将其部署到64位机器.

  3. 当Ii尝试调用wcf服务时出现错误"80040154类未注册(HRESULT异常:0x80040154(REGDB_E_CLASSNOTREG")

  4. 现在,我使用ProcMon.exe来跟踪com注册表问题,并确定该进程正在HKLM\CLSID和HKCR\CLSID中查找没有条目的注册表项.

  5. 了解到Microsoft不会将32位com组件注册到64位计算机中的路径HKLM\CLSID,HKCR\CLSID,而是将条目放在HKLM\Wow6432Node\CLSID和HKCR\Wow6432Node\CLSID路径中.

  6. 现在冲突是64位进程试图在64位机器中调用32位进程,它将在HKLM\CLSID,HKCR\CLSID中查找注册表项.解决方案是我们必须强制64位进程查看HKLM\Wow6432Node\CLSID和HKCR\Wow6432Node\CLSID的注册表项.

  7. 这可以通过将wcf服务项目属性配置为"X86"计算机而不是"任何"来实现.

  8. 将"X86"版本部署到2008 R2服务器后出现问题"System.BadImageFormatException:无法加载文件或程序集"

  9. 这个badimageformatexception的解决方案是在右侧apppool的IIS Apppool属性中将"Enable32bitApplications"设置为"True".


Mar*_*edo 7

问题是DLL在32位版本的Windows注册表上注册,并且应用程序使用的是64位版本.

解决方案:进入"项目属性","编译"选项卡,然后单击"高级编译选项...".将"目标CPU"更改为x86,单击"确定",保存并重试.

资料来源:http: //www.theogray.com/blog/2009/10/comexception-regdbeclassnotreg-on-64-bit-windows

使用从.Net 4 Winforms应用程序调用的VB 6 COM DLL为我工作


sel*_*bie 5

在您使用的代码中,调用了 Win32 API CoCreateInstance来动态加载 DLL 并从中实例化一个对象。

组件 ID 和能够实例化该对象的 DLL 之间的映射通常可以在注册表中的 HEKY_CLASSES_ROOT\CLSID 中找到。进一步讨论这个将解释很多关于Windows 中的 COM。但该错误表明注册表中不存在 COM guid。

我不太了解 PackAndGo DLL 是什么(一个 Autodesk 组件),但我怀疑您只需要通过指定的安装程序“安装”该组件或它附带的软件包即可拥有该 DLL 和适当的 COM 注册表项您正在尝试运行代码的计算机。(即为该产品运行 setup.exe)。

换句话说,我认为您需要在这台计算机上安装“打包”,而不仅仅是将 DLL 复制到目标机器上。

此外,请确保您决定构建适合 32 位与 64 位的代码,具体取决于您安装的 Pack And Go 的构建风格(32 位或 64 位)。


小智 5

我有同样的问题。我尝试了很多方法,但最终解决方案很简单。解决方案:打开IIS,在应用程序池中,右键单击正在使用的.net框架。转到设置并将“启用 32 位应用程序”更改为“真”。