2010-09-23 141 views
4

我知道我读了所有关于代理过程,我能够创建一个代理COM,但它可以全部在32位工作或全部工作在64位。我需要从一个64位exe访问一个32位DLL

什么是正确的结构?

1)32.DLL < - 64.com < - 64.exe 2)32.DLL < - 32.com < - 64.exe

我尝试上述两种的,但我没有成功调用32.dll?

+0

请参阅[本答案](http://stackoverflow.com/a/12938217/184528),以获取有关从64位应用程序访问32位DLL的更全面列表。 – cdiggins 2012-10-17 15:50:31

回答

0

这是defenetly你想要什么: 32.DLL < - 32.com < - 64.exe 如果它不工作,表现出更多的细节如何不起作用。另外,如果你没有打很多电话,你可以通过套接字进行通信(只是一个备份计划)。

+0

实际上,我只调用一个传递文件名的函数,但是dll必须由应用程序域承载,因为它会创建一个窗口并等待用户响应。 – 2010-09-23 13:58:18

+0

你是什么意思的套接字调用。例如,创建一个侦听端口的com,并在连接时启动32.dll?也许我可以通过一项服务来达到目的? – 2010-09-23 14:00:23

+0

32.dll < - 32.com < - 64.exe的实际问题是,当我在64.exe中创建com对象时,无法找到它,因为它被注册为32.com,不知何故WOW会将其转移作为错误:未注册的类。 – 2010-09-23 14:07:31

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位进程中。

+1

这就是所谓的外部COM服务器 - 你自己写了一个单独的.exe。这是一个很好的解决方案,但需要一些努力。 OP正在询问一个稍微不同的事情 - 当进行一些调整时,COM运行时会创建一个特殊的进程(称为代理)并在其中加载.dll,然后它就像一开始就有一个out-proc COM服务器一样工作。 – sharptooth 2010-11-09 13:51:12

+0

非常整齐。感谢您抽出宝贵的时间! – 2010-11-09 20:00:26