我有一个C#应用程序使用C++COM目都建立在一个32位的机。现在我需要运行它们在64位机。我注册COM对象。相应的条目是建立在登记册下的计算机注册表\wow6432node\clsid{xxx}.然而,当我尝试运行的应用程序,它说,"检索COM类工厂组件与CLSID{xxx}失败,原因是以下错误:80040154.".我的理解、错误代码装置此类是没有注册。请帮助!感谢

有帮助吗?

解决方案

第一以上的答案是正确的答案。你不能运行CPU任何目标的应用程序在64位Windows如果你参考的一个32位COM组成部分。它将不负荷。

发生了什么JIT是看到CPU任和促进应用到64位。但是没有64位版本的com控制,因此你让未注册的错误。

这是一个大问题的人使用微软Access为他们的数据库。没有64位版本的访问,所以当他们看到错误,他们认为他们需要一64位运行时(不存在)。你有标志你的应用为32位只有在以使用的访问,运行时间。

这是一个糟糕的选择(恕我直言)-找到更好的组件,有64位版本,或者去100%的管理编码。

我不喜欢的每个标记应用程序作为32位,除非他们真的需要它。

其他提示

C#应用程序可能已经汇编的任何CPU目标,这将运行为中的64位方式在一64机。64位的进程不能访问32-位进程。

在Visual Studio,可以迫使它编制为32-位应用程序。它在该项目的性质,建立卡、平台的目标拉.它设置 x86.

可能还有其他的方式迫使它作为一个32-位应用程序,但我不熟悉他们的。

。净运行时将自动运行的应用为64位和它再也不能负荷的32位COM component到它的过程。

这是非常容易的解决方法,如果COM component具有自动化兼容的界面。创建一个COM+应用程序(控制面板->管理工具->组件服务),并添加的组成部分。这样你会力创造的成分在一个单独过程中,你将不会再照顾你的客户应用程序的运行为64-位应用程序。

我觉得你不可以运行的一个32位的应用程序本身就有64位机。你需要编译程序,因为64位的二进制或运行它在一个模拟器(如WOW64on windows)。如果你的程序(建立在64二)使用的任何外部dll,还需要64位版本的所有这些dll。

这里有一个很好的参考:

http://searchwindowsserver.techtarget.com/tip/0,289483,sid68_gci1220022,00.html

编辑:

如果你走到项目的性质->建立,变化平台的目标是从"任何CPU"以X86。看到如果这会有所帮助。

或者你需要注册dll: http://riteshk.blogspot.com/2007/05/retrieving-com-class-factory-failed-due.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top