Visual studio 2008 正在检索COM类工厂故障。错误:80040154

Visual studio 2008 正在检索COM类工厂故障。错误:80040154,visual-studio-2008,dll,com,iis-6,64-bit,Visual Studio 2008,Dll,Com,Iis 6,64 Bit,由于以下错误,检索CLSID为{AD37B7D5-B5A3-460A-8FFB-3C71984A4537}的组件的COM类工厂失败:80040154 例外情况详情: System.Runtime.InteropServices.COMException:由于以下错误,检索CLSID为{AD37B7D5-B5A3-460A-8FFB-3C71984A4537}的组件的COM类工厂失败:80040154 我正在ASP.NET Web应用程序中使用COM DLL。我已经成功地让它在我自己的开发机器和构

由于以下错误,检索CLSID为{AD37B7D5-B5A3-460A-8FFB-3C71984A4537}的组件的COM类工厂失败:80040154

例外情况详情:

System.Runtime.InteropServices.COMException:由于以下错误,检索CLSID为{AD37B7D5-B5A3-460A-8FFB-3C71984A4537}的组件的COM类工厂失败:80040154

我正在ASP.NET Web应用程序中使用COM DLL。我已经成功地让它在我自己的开发机器和构建机器上工作。
但是,当我尝试将项目部署到另一台计算机(Microsoft Windows Server 2003 R2)时,出现了上述错误

我已经使用regsvr32命令注册了COM DLL。它说DLL已成功注册

我正在Visual Studio 2008中使用ASP.NET 3.5版开发该项目,并将我的项目构建为在任何CPU上运行,每台计算机使用64位Windows。 我正在使用IIS 6.0版。
(我已尝试使IIS运行32位应用程序,这导致web应用程序不可用。)

我编写了一个Windows脚本文件来检查COM DLL是否工作(即独立于项目)。 该脚本在我的构建机器和我自己的开发机器上都运行良好。
但是,它没有在我遇到问题的机器上正常运行(Microsoft Windows Server 2003 R2)。 我要做的是使用以下命令(我发现)从命令行运行脚本:

以这种方式运行时,wscript文件将成功运行。
我认为这与COM DLL的构建版本有关

是否需要在Visual Studio项目中启用某些设置?

(请注意,我自己没有构建COM DLL。其他人已经构建了它并将其提供给了我。)

这是COM的FileNotFound错误。在这种情况下,很可能是咬合问题。注册表将32位和64位服务器的COM注册分开。当您从syswow64目录运行wscript.exe时,它会工作,这是32位可执行文件的主目录。64位进程将无法在注册表中找到32位服务器。它也无法使用它。通过运行c:\windows\system32\wscript.exe重新编程

您首先必须构建x64版本的COM服务器,以便64位进程可以使用它。然后,您必须使用64位版本的Regsvr32.exe注册它,该版本位于c:\windows\system32中,而不是syswow64中。如果仍然有问题,那么使用SysInterals的ProcMon实用程序来找出进程在注册表和文件系统中的位置


或者让IIS以32位模式运行。这是另一个需要不同标记的问题。

我通过为dll创建COM+应用程序解决了这个问题。

我在使用第三方.dll文件时收到80040154错误。最后,我发现错误是由于尝试API禁止的调用造成的——Visual Studio让我认为这些调用是可以的。因此,一个答案可能是用dll文档(即RTFM)检查API调用是否正确


我想我会加上这个,因为它可能会节省一些宝贵的时间。

@Hans:谢谢你的回复。请解释一下“您必须首先构建x64版本的COM服务器,以便64位进程可以使用它”的意思。请构建+配置管理器,右上角组合(活动解决方案平台),选择新建并选择“x64”。如果未安装64位编译器,则不可用。创建64位版本的DLL并不总是那么简单,它在很大程度上取决于代码的干净程度。如果您以前从未构建过64位可执行文件,那么您真的应该从头开始研究如何处理IIS。实际上,我自己还没有构建COM dll。要编译它的x64版本,我必须让构建它的人将dll重新编译为x64。或者我可以将我的web应用程序重新编译为平台目标x64吗?好吧,大家聚在一起讨论一下。我没办法。不,将web应用程序重新编译到x64并不能解决问题,它已经在64位模式下运行。再次感谢,我与开发COM dll的人员进行了交谈。他告诉我,它是用delphi开发的,目前还没有64位编译器。这是解决这个问题的唯一办法还是你能找到解决办法?
C:\WINDOWS\SysWOW64\wscript.exe COMtest.js