gpt4 book ai didi

delphi - 如何为静态加载的DLL设置相对路径?

转载 作者:行者123 更新时间:2023-12-03 15:17:38 30 4
gpt4 key购买 nike

我有一个用 Delphi 7/Windows XP 制作的 DLL,我想将其静态加载到 Windows 上的主机应用程序中(也是用 Delphi 制作的)。我正在使用这行代码:

procedure Prepare_HTML_Email(var MailMessage : TIdMessage;
const FileAddress, aDetail, aAlarmType : String); stdcall; external DLL_ADDRESS;

哪里DLL_ADDRESS必须是 DLL 所在的位置。但此时我有一个问题。主机应用程序是一个服务,因此它运行在 C:\WINDOWS\System32 ,但我想将DLL放在另一个目录中,而不是放在 C:\WINDOWS\System32 中。 “external”关键字不允许其后跟函数,它只允许常量表达式。那么,如何获取DLL的路径呢?

最佳答案

首先,您没有“静态加载”任何东西。 DLL中的D代表动态;无论如何,所有 DLL 都是动态链接的。静态链接是 DCU 和 OBJ 文件包含在程序中的方式。您无法静态链接到 DLL。

您正在谈论加载时动态链接,其中操作系统根据程序导入表中列出的函数隐式为您加载DLL,而不是运行时动态链接,您可以使用任何您想要的内容调用LoadLibrary。当您使用 external 指令定义函数时,您会在导入表中创建一个条目,据我所知,相对路径是没有意义的。操作系统在加载时(和运行时)使用 certain documented search order 查找 DLL。 。一般来说,它是应用程序自己的目录、当前目录、系统目录、Windows 目录,然后是 PATH 环境变量上的其他所有内容。

就您而言,当前目录和系统目录位于同一位置,并且您无论如何都无法控制它们。不要将 DLL 放在 Windows 目录中;已经有足够多不属于那里的东西了。

最好的办法是将 DLL 放在与服务 EXE 相同的目录中。如果您不想这样做,那么您可以在该目录中的一个 DLL 中放置足够的内容来引导您的程序,然后使用您想要的任何私有(private) DLL 目录通过 LoadLibrary 加载其他所有内容。

您可以将 DLL 放在其他位置,然后将该目录添加到 PATH 环境变量中。不过,该变量是共享资源,因此在更改它之前请三思。

关于delphi - 如何为静态加载的DLL设置相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828185/

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