使用 32 位进程中的 64 位 COM 对象

发布于 2024-08-30 15:26:26 字数 627 浏览 16 评论 0原文

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

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

I'm using the virtualbox api that uses COM on windows. If you have a 64 bit OS it will install the 64 bit version and the COM interfaces will be accessible to 64 bit clients but not to 32 bit ones. I'm told this is a COM limitation but I have seen ways to use dll32 to "publish" 32 bit interfaces on the registry, so 64 bit processes can call these COM servers, but I can't find the inverse, accessing 64 bits interfaces from 32 bits processes.

If I wasn't very clear I believe this person wants to achieve something similar: http://www.codeproject.com/Forums/1648/COM.aspx?fid=1648&df=90&mpp=25&sort=Position&select=1702805&tid=1702805

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦罢 2024-09-06 15:26:26

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

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

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

In process thunking will always work only only from higher bitness to lower one, not the other way around. When Win32 came out, a 32 bit process could thunk a 16 bit dll, but there was just no way a 32 bit dll could be thunked into a 16 bit process. Same is true now, a 32 bit dll can be thunked into a 64 bit process, but there is no way a 64 bit dll can be thunked into a 32 bit process (with the exception of the WOW64 emulator DLLs: Wow64.dll, wow64Win.dll and Wow64Cpu.dll).

If you want to load a 64 bit COM in-process-dll, you'll need an out-of-process 64bit loader and your 32 bit app can communicate with the loaded and pass the necessary parameters for the call, and receive the result.

For out-of-process 64 bit COM local servers you'll need the 32 bit proxy DLLs, see Interprocess Communication Between 32-bit and 64-bit Applications.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文