2

我正在使用在 Windows 上使用 COM 的 virtualbox api。如果您有 64 位操作系统,它将安装 64 位版本,并且 COM 接口将可被 64 位客户端访问,但不能被 32 位客户端访问。有人告诉我这是一个 COM 限制,但我已经看到使用 dll32 在注册表上“发布”32 位接口的方法,因此 64 位进程可以调用这些 COM 服务器,但我找不到相反的,访问 64 位来自 32 位进程的接口。

如果我不是很清楚,我相信这个人想要实现类似的目标: http: //www.codeproject.com/Forums/1648/COM.aspx?fid= 1648&df=90&mpp=25&sort=Position&select=1702805&tid=1702805

4

1 回答 1

4

在进程中, thunking将始终仅从较高位到较低位起作用,而不是相反。当 Win32 出现时,一个 32 位的进程可以 thunk 一个 16 位的 dll,但是 32 位的 dll 不可能被 thunk 到一个 16 位的进程中。现在也是如此,可以将 32 位 dll 转换为 64 位进程,但无法将 64 位 dll 转换为 32 位进程(WOW64 模拟器 DLL除外:Wow64.dll、wow64Win .dll 和 Wow64Cpu.dll)。

如果要加载 64 位 COM 进程内 dll,则需要一个进程外 64 位加载器,并且您的 32 位应用程序可以与加载的通信并传递调用所需的参数,并接收结果.

对于进程外 64 位 COM 本地服务器,您需要 32 位代理 DLL,请参阅32 位和 64 位应用程序之间的进程间通信

于 2010-05-01T19:56:53.310 回答