我有一些32位DLL没有匹配的64位DLL.如何从Delphi XE2编写的64位应用程序中调用这些DLL?
解决方法
不,你不能直接这样做. 64位进程只能执行64位代码,32位进程只能执行32位代码.
诀窍是使用多个进程….(注意,这可以为非可视化代码,甚至GUI元素,虽然可能有一些小但有问题的行为的视觉元素.)
最常见的解决方案是将32位dll包装在一个不在进程的COM服务器中,您可以通过64/32位屏障调用它. (这两种方式,您可以创建一个64位的进程COM服务器,也可以从32位应用程序调用它).
是的,还有其他方法可以设想这个,但最常见的是使用COM:
>创建一个新的32位的进程COM服务器,托管32位
DLL并从32位dll公开所需的功能.
>从你的64位代码调用这个COM服务器
我应该补充说,也可以创建新的32位COM服务器作为进程内的COM服务器,然后配置COM来运行它. COM会将其运行,并且奇迹般地运行您的32位进程中的COM服务器,您可以透明地从32位和64位代码中调用它,就像它正在进行中一样. (注意,如果COM服务器是一个GUI控件,出于进程可能或可能不起作用,我所使用的团队已经成功完成了,但是有一些复杂性(其中一些不能被克服)与挂钩父代相关窗口和控件在整个流程边界无法完成.)