.net 在64位Windows计算机上使用32位com运行32位应用程序 我使用C++的COM对象,在32位机器上都有一个C语言应用程序。现在我必须在64位机器上运行它们。我注册了COM对象。在计算机\hkey\U classes\U root\wow6432node\clsid{xxx}下的寄存器中创建了相应的条目。 但是,当我尝试运行应用程序时,它会说|“由于以下错误,检索CLSID为{xxx}的组件的COM类工厂失败:80040154”。据我所知,错误代码意味着该类未注册。 请帮忙!!! 谢谢

.net 在64位Windows计算机上使用32位com运行32位应用程序 我使用C++的COM对象,在32位机器上都有一个C语言应用程序。现在我必须在64位机器上运行它们。我注册了COM对象。在计算机\hkey\U classes\U root\wow6432node\clsid{xxx}下的寄存器中创建了相应的条目。 但是,当我尝试运行应用程序时,它会说|“由于以下错误,检索CLSID为{xxx}的组件的COM类工厂失败:80040154”。据我所知,错误代码意味着该类未注册。 请帮忙!!! 谢谢,.net,com,64-bit,jit,.net,Com,64 Bit,Jit,这个C#应用程序可能是用任何CPU目标编译的,它将在64位模式下在x64机器上运行。64位进程无法访问32位进程 在VisualStudio中,可以强制将其编译为仅32位的应用程序。它位于项目属性、构建选项卡、平台目标下拉列表中。将其设置为x86 可能还有其他方法可以强制它作为32位应用程序运行,但我不熟悉这些方法。我认为您无法在64位机器上以本机方式运行32位应用程序。您需要将应用程序编译为64位二进制文件,或者在模拟器下运行(如windows上的WOW64)。如果您的应用程序(内置64位二进

这个C#应用程序可能是用任何CPU目标编译的,它将在64位模式下在x64机器上运行。64位进程无法访问32位进程

在VisualStudio中,可以强制将其编译为仅32位的应用程序。它位于项目属性、构建选项卡、平台目标下拉列表中。将其设置为
x86


可能还有其他方法可以强制它作为32位应用程序运行,但我不熟悉这些方法。

我认为您无法在64位机器上以本机方式运行32位应用程序。您需要将应用程序编译为64位二进制文件,或者在模拟器下运行(如windows上的WOW64)。如果您的应用程序(内置64位二进制)使用任何外部DLL,您还需要所有这些DLL的64位版本

这里有一个很好的参考:

编辑:

如果转到项目的属性->构建,则将平台的目标从“任意CPU”更改为X86。看看这是否有帮助


或者您需要注册DLL:

以上第一个答案是正确答案。如果引用32位COM组件,则无法在64位Windows上的任何目标应用程序上运行CPU。它不会加载

现在的情况是,JIT看到了任何CPU,并将您的应用程序提升到64位。但是com控件没有64位版本,因此会出现未注册错误

对于使用Microsoft Access进行数据库访问的人来说,这是一个大问题。Access没有64位版本,因此当他们看到错误时,他们认为需要64位运行时(不存在)。要使用Access运行时,您必须仅将应用程序标记为32位

这是一个糟糕的选择(IMHO)-找到一个具有64位版本的更好的组件,或者使用100%托管代码


我不喜欢只将每个应用程序标记为32位,除非它们确实需要它。

NET运行时自动将应用程序作为64位运行,并且它不再能够将32位COM组件加载到其进程中


如果COM组件具有与自动化兼容的接口,那么这很容易解决。创建COM+应用程序(控制面板->管理工具->组件服务)并将组件添加到其中。这样,您将强制在单独的过程中创建组件,您将不再关心您的客户端应用程序是否作为64位应用程序运行。

首先,非常感谢!我将应用程序重建为x86,它找到了com对象。现在我想知道是否也应该将它所依赖的所有库重建为x86。仅以x86配置构建应用程序就足够了,还是其所有依赖项也应构建为x86?再次感谢!通常,运行的应用程序域(主应用程序)将指定应用程序的位大小。如果您的主应用程序是x86,JIT通常不会将您的任何应用程序升级到64位。但这取决于你如何加载它。为了安全起见,您可能希望将所有这些都标记为x86。