我需要从一个64位的exe文件中访问一个32位的dll。

4
我知道关于代理进程的所有内容,我能够创建一个代理COM,但它只能在32位或64位中全部工作。
那正确的结构是什么呢?
1)32.dll <- 64.com <- 64.exe 2)32.dll <- 32.com <- 64.exe 我尝试了上述两种方法,但我没有成功调用32.dll?

请参考此答案,获取更全面的访问32位DLL文件的技巧列表,以供64位应用程序使用。 - cdiggins
2个回答

1

我对你所提到的代理COM并不是很了解,但我已经通过引入一个COM对象来解决了这个问题(使用64位exe调用32位dll):

32.dll <-> 32位进程外COM服务器.exe <-> 64.exe。

抱歉,这可能就是你所说的32.com,但请确保中间的COM对象存在于一个.exe文件(进程外),而不是一个dll文件。这是因为你不能将原始的32.dll加载到64位进程中的同样原因。


1
这被称为外部进程COM服务器 - 你需要自己编写一个单独的.exe文件。这是一个不错的解决方案,但需要一些努力。OP正在询问略微不同的事情 - 当使用一些调整时,COM运行时会创建一个特殊的进程(称为代理),并在那里加载.dll文件,然后所有工作都像第一次有一个外部进程COM服务器一样。 - sharptooth
非常整洁。感谢您抽出时间,Sharptooth! - Hannes de Jager

0
这绝对是你想要的: 32.dll <- 32.com <- 64.exe 如果它不能正常工作,请展示更多细节,说明它为什么不能正常工作。
此外,如果你不需要进行太多调用,你可以通过套接字通信(只是备选计划)。

实际上,我只调用了一个函数并传递了一个文件名,但是dll必须由应用程序域托管,因为它创建了一个窗口并等待用户响应。 - Canan Erdol
你所说的套接字调用是什么意思?例如,创建一个监听端口并在连接时启动32.dll的COM对象?也许我可以用一个服务来实现这个功能? - Canan Erdol
32.dll <- 32.com <- 64.exe 的实际问题是,当我在 64.exe 中创建 com 对象时,它无法找到它,因为它被注册为 32.com,某种方式 WOW 将其重定向为错误:未注册的类。 - Canan Erdol
是的,32位应用程序监听一个端口,并从中执行命令。您可以从64位应用程序发送命令。这将始终起作用 :-) - BarsMonster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接