【问题标题】:64 Bit application communicating with 32bit process64 位应用程序与 32 位进程通信
【发布时间】:2012-01-19 08:16:15
【问题描述】:

我有使用 32 位第三方库的 32 位应用程序。现在我必须让我的应用程序 64 位,以便它可以利用 64 位地址空间(大内存)。 由于我无法将 32 位库加载到 64 位应用程序进程中,我正在考虑在第三方库上创建 32 位可执行包装器,并使用 IPC(命名为管道/套接字)从我的 64 位应用程序进行通信。 所以我的问题是他们这样做会有什么问题吗? 此外,如果我必须在 64 位系统上安装我的应用程序,与我的应用程序相关的所有文件都将复制到“c:\Program Files”目录。现在我可以将我的 32 位第三方 exe 包装器保存在同一个“c:\Program Files”中还是需要复制到“c:\Program Files(x86)”目录中?

【问题讨论】:

  • 共享内存(通过内存映射文件)可能是最快的数据选择。
  • @AlexeyFrunze 32 位和 64 位之间的共享内存对我来说似乎很可疑:“使用共享内存时,请注意 32 位进程中的结构可能具有不同的大小和布局64 位进程中的相同结构。对于包含指针或句柄的结构尤其如此。 msdn.microsoft.com/en-us/library/windows/desktop/…

标签: windows 64-bit 32bit-64bit 32-bit x86-64


【解决方案1】:

这正是微软针对此类问题推荐的方式。如果您正在使用 COM,您可以制作 COM exe 服务器。对于 .NET,使用 WCF。在您的情况下 - 本机 C++,没有 COM - 内存映射文件或管道是一个不错的选择。

关于安装目标文件夹 - 您需要使用用于构建安装包的工具进行测试。如果整个安装目标是 64 位,而单个可执行文件是 32 位 - 该工具可能会显示有关此文件的警告。执行文件时,不管它是在 Program Files 还是 Program Files (x86) 或任何其他目录中。

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2020-07-04
    相关资源
    最近更新 更多