【问题标题】:I need to access a 32bit dll from a 64bit exe我需要从 64 位 exe 访问 32 位 dll
【发布时间】:2011-04-16 06:40:53
【问题描述】:

我知道我阅读了有关代理进程的所有内容,并且能够创建代理 COM,但它要么全部在 32 位中工作,要么全部在 64 位中工作。

什么是正确的结构?

1) 32.dll

以上两种方法我都试过了,但调用32.dll都没有成功?

【问题讨论】:

  • 有关从 64 位应用程序访问 32 位 DLL 的更全面技术列表,请参阅 this answer。

标签: dll com 32bit-64bit


【解决方案1】:

我不太了解您所指的代理 COM,但我通过在中间引入一个 COM 对象解决了这个问题(使用 64 位 exe 中的 32 位 dll):

32.dll 32bit-out-of-process-com-server.exe 64.exe.

抱歉,这可能是您所说的 32.com,不确定,但请确保中间 COM 对象位于 .exe(进程外)而不是 dll 中。这与您无法将原始 32.dll 加载到 64 位进程中的原因相同。

【讨论】:

  • 这就是所谓的out-proc COM 服务器——你自己编写了一个单独的.exe。这是一个很好的解决方案,但需要一些努力。 OP 询问的是一个稍微不同的事情——当通过一些调整 COM 运行时创建一个特殊的进程(称为代理)并在那里加载 .dll,然后它就好像首先有一个 out-proc COM 服务器一样工作。
  • 非常整洁。感谢您抽出宝贵时间!
【解决方案2】:

这绝对是你想要的: 32.dll

另外,如果你不经常打电话,你可以通过套接字进行通信(只是一个备用计划)。

【讨论】:

  • 实际上我只调用了一个传递文件名的函数,但 dll 必须由应用程序域托管,因为它会创建一个窗口并等待用户响应。
  • 套接字调用是什么意思。例如,创建一个侦听端口的 com,并在连接时启动 32.dll?也许我可以通过服务做到这一点?
  • 32.dll
  • 是的,32 位应用程序监听一个端口,并从中执行命令。您从 64 位应用程序发送命令。这将始终有效:-)
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2016-08-28
  • 2017-02-18
  • 1970-01-01
  • 2014-07-18
  • 2015-05-30
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多