使用 C++ 从 32 位进程访问 64 位 dll

Posted

技术标签:

【中文标题】使用 C++ 从 32 位进程访问 64 位 dll【英文标题】:access 64bit dll from 32bit process using C++ 【发布时间】:2014-07-18 13:29:20 【问题描述】:

我确实发布了它不可能在同一进程中将 64 位 dll 加载到 32 位 dll 中。 但是我可以将我的 64 位 dll 放入 com 并从我的 32 位应用程序访问该 com。 任何人都可以为我提供这样做的样本吗?有没有其他方法可以解决这个问题?

注意:我无法将 64 位 dll 构建为 32 位作为其外部 3rd 方 dll,我无法将我的 32 位进程转换为 64 位,因为它是一个非常庞大的应用程序。将其转换为 64 位需要我很多年。

任何帮助将不胜感激

【问题讨论】:

您可以使用 COM exe 服务器或任何其他方式的进程间通信(套接字、管道、全局事件、共享内存、Windows 消息传递等)。决定哪种方式更适合您。 在哪里可以找到使用 COM exe 服务器的示例? 搜索“进程外”COM 服务器。您也可以使用 DCOM。我听说可以使用dllhost.exe(Windows 附带)将进程内 COM 服务器转换为 DCOM 服务器,尽管我对细节不满意 COM 服务器是否包含类型库或附带类型库? @MattMcNabb 你没听错;它称为DLL Surrogate,如果您的组件符合要求(不需要太多),您可以这样做。我以相反的方式完成了它(64 位进程访问了一个 32 位代理托管的 in-proc-COM-lib)并且可以证明它可以完成。 【参考方案1】:

您可以利用有关从 32 位进程访问 64 位的进程通信。 下面是一些步骤。

    做一个COM服务器,example,可以修改工程属性生成64位程序。

    定义并实现cominterface,在COM服务器中,加载64位dll,以及封装dll函数。

    32bit App调用COM服务器接口(CLSCTX_ACTIVATE_64_BIT_SERVER),通过参数发送数据并获取结果。

【讨论】:

以上是关于使用 C++ 从 32 位进程访问 64 位 dll的主要内容,如果未能解决你的问题,请参考以下文章

如何测量 32 位程序中 64 位进程的内存使用情况?

在 64 位(或 32 位)Windows 上以 32 位进程访问 >2、3、4GB 文件

在 64 位操作系统上,32 位进程可以访问多少内存?

如何从 32 位进程启动 64 位进程

从 64 位进程调用 32 位代码

从 32 位进程获取 64 位进程的命令行字符串