使用 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的主要内容,如果未能解决你的问题,请参考以下文章