gpt4 book ai didi

delphi - 如何从 64 位代码调用 32 位 DLL?

转载 作者:行者123 更新时间:2023-12-03 14:42:52 25 4
gpt4 key购买 nike

我有一些 32 位 DLL,但没有匹配的 64 位 DLL。如何从用 Delphi XE2 编写的 64 位应用程序调用这些 DLL?

最佳答案

不,您不能直接执行此操作。 64位进程只能执行64位代码,32位进程只能执行32位代码。

技巧是使用多个进程......(请注意,这可以用于非可视代码,甚至 GUI 元素,尽管可视元素可能存在一些小但有问题的行为.)

最常见的解决方案是将 32 位 dll 包装在进程外 COM 服务器中,您可以跨 64/32 位屏障调用该服务器。 (这是双向的,您可以创建 64 位进程外 COM 服务器并从 32 位应用程序调用它。)

是的,还有其他方法可以实现这一点,但最常见的是使用 COM:

  1. 创建一个新的 32 位进程外 COM 服务器来托管您的 32 位DLL 并公开 32 位 DLL 所需的功能。
  2. 从 64 位代码调用此 COM 服务器

我应该补充一点,也可以创建新的 32 位 COM 服务器作为进程内 COM 服务器,然后配置 COM+ 来运行它。 COM+ 将在进程外运行它,并神奇地在进程外运行您的 32 位进程中 COM 服务器,您可以在其中透明地从 32 位和 64 位代码调用它,就像它在进程中一样。 (请注意,如果 COM 服务器是 GUI 控件,则退出进程可能有效,也可能无效。与我合作的团队已成功完成此操作,但存在与 Hook 父级相关的复杂性(其中一些无法克服)无法跨进程边界完成的窗口和控件。)

关于delphi - 如何从 64 位代码调用 32 位 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8484204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com