在"瘦"64位DLL包装器中包装32位COM shell扩展

BTo*_*TKD 5 c++ windows com shell-extensions 32bit-64bit

前提:

我有一个旧的32位COM shell扩展(用C++编写).经过多年与更新的64位系统的不兼容,我们现在正在更新它以在64位Windows环境中工作.

诀窍:

32位COM DLL包含对第三方库的依赖性,对于这些库,没有可用的64位版本.因此,我们不能简单地"重新编译64位".鉴于此限制,我们决定最简单的方法是创建一个"瘦"的64位DLL; 本质上是一个空DLL,只定义所需的接口,并将所有调用重定向到底层的32位COM DLL.

我相信通过使用COM代理,可以在64位COM DLL和32位COM DLL之间进行通信.不幸的是,这似乎是一个非常具体/小众的主题,我一直无法找到很多关于如何从64位COM DLL调用32位COM API的资源.

问题:

  • 这个'瘦COM包装器'是一种合理的方法,用于启用32位COM DLL的64位功能吗?
  • 是否有任何理由这种方法不适用于Windows Shell Extensions?
  • 64位接口定义是否会使用与32位接口相同的GUID?
  • 这是过去记录的策略吗?
  • 在64位COM DLL中调用32位COM API有什么好的资源吗?

澄清:

这个问题有许多方面使它独特,使其与" 在Windows 7 64位中使用32位外壳扩展 "这一问题区分开来.

我不是在询问是否可以在64位资源管理器进程中加载​​32位shell扩展,正如引用的问题所做的那样.相反,我问是否有可能创建DLL精简64位实现,它充当64位资源管理器进程和32位实现之间的桥梁.

要清楚,这是不可能的.

在此输入图像描述

但也许这是

在此输入图像描述