64位应用程序与32位进程通信

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

共享内存(通过内存映射文件)可能是数据的最快选项。 - Alexey Frunze
@AlexeyFrunze 在32位和64位之间共享内存对我来说似乎是可疑的:“在使用共享内存时,请注意,32位进程中的结构可能与64位进程中的相同结构具有不同的大小和布局。这对于包含指针或句柄的结构尤其如此。” http://msdn.microsoft.com/en-us/library/windows/desktop/ee872017(v=vs.85).aspx - ToolmakerSteve
1个回答

3
这正是微软针对此类问题推荐的方法。如果您正在使用COM,则可以创建COM exe服务器。对于.NET,请使用WCF。在您的情况下——本机C++,没有COM——内存映射文件或管道是一个不错的选择。
关于安装目标文件夹——您需要使用用于构建安装包的工具进行测试。如果整个安装目标是64位,并且单个可执行文件是32位——该工具可能会显示有关此文件的警告。当执行该文件时,它无论位于Program Files还是Program Files(x86)或任何其他目录都没有关系。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接