gpt4 book ai didi

c++ - 64 位系统上的 32 位 Com 服务器

转载 作者:行者123 更新时间:2023-11-28 08:26:14 25 4
gpt4 key购买 nike

我在 Windows XP 32 位上开发了一个 Com 服务器。为了测试 Com 服务器,我使用 C# 创建了一个客户端以通过互操作调用函数。一切正常,但现在我需要让 ComServer 在 Windows 7 64 位系统上运行。我将 ComServer DLL 和 C# EXE 带到 64 位计算机上,使用 regsrv32 注册 ComServer DLL 并启动 C# 程序。当我第一次尝试访问 ComServer 函数时,我得到的只是错误:

System.Runtime.InteropServices.COMException (0x80040154): Die COM-Klassenfactory für die Komponente mit CLSID {BA4D7F46-A47E-4CB9-A153-2B4657C4DD29} konnte aufgrund des folgenden Fehlers nicht abgerufen werden: 80040154.

英语:

System.Runtime.InteropServices.COMException (0x80040154): The COM-Classfactory for the Component with the CLSID {BA4D7F46-A47E-4CB9-A153-2B4657C4DD29} was not able to be called due to the Error: 80040154.

这里出了什么问题?不是可以在 64 位系统上调用 32 位 DLL 吗?如果是,所有其他 32 位程序如何工作?

问候 Camel 领主

最佳答案

您不能将 32 位库加载到 64 位进程中,反之亦然 - 库和进程必须具有相同的位数。

最好的解决方案是获取 64 位版本的 COM 服务器库。如果那不可能(这很常见),您有两个选择:

  • 使消费程序成为 32 位(可能您必须在 Visual Studio 中将目标从“任何 CPU”更改为“x86”)
  • 强制 COM 服务器进入代理进程(为此使用 COM+)。

在第一种情况下,您将程序和 COM 服务器都设为 32 位,因此 COM 服务器库可以正常加载。在第二种情况下,COM+ 创建一个 32 位代理进程并将库加载到其中,您的程序通过 RPC 与该进程通信,因此您不必关心位数差异。

这两种选择都有缺点。在第一种情况下,即使在 64 位系统上,您的程序也是 32 位的。在第二种情况下,由于进程间通信,您会遇到开销。

关于c++ - 64 位系统上的 32 位 Com 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3986006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com