gpt4 book ai didi

delphi - 如何从可执行文件调用 bpl 中的 Delphi 函数?

转载 作者:行者123 更新时间:2023-12-03 14:46:41 24 4
gpt4 key购买 nike

我有一个 Delphi 应用程序,我为它编写了一个相当简单的包装器 .exe。

基本上,有一个 dll,它有很多函数,一旦我的包装器完成了它需要的操作,我就会迭代调用其中一个函数。我无法控制这个 dll 文件,也永远不会控制。

好吧,现在这个 DLL 是一个 BPL,我不知道如何调用该文件中的函数。提前致谢。

最佳答案

使用包中函数的简单方法是“使用”包含该函数的单元,照常调用它,然后将该包放在项目的运行时包列表中。为此,有一些要求:

  1. 您的项目必须使用与编译包相同的 Delphi 版本。
  2. 您必须有权访问该设备的 DCU 文件,或者至少有权访问该包的 DCP 文件。
  3. 程序启动时,该软件包必须存在于操作系统的搜索路径中。

如果你不能满足第三个要求,或者如果你不想一直加载包,那么你可以调用LoadPackage来代替。实现这一点的方法是让另一个包始终被加载。它将被您的项目和您想要加载的包使用。中间包将公开一个接口(interface)(例如一些注册函数、变量或类),主包可以使用该接口(interface)告诉应用程序其功能是什么。您将无法直接在应用程序中“使用”主包的单元。

如果您不能满足前两个要求,那么还有更困难的方法,如果您的应用程序不是用 Delphi 或 C++ Builder 编写的,这也是您需要做的。将包视为普通 DLL。使用LoadLibrary加载它。使用GetProcAddress加载其Initialize函数,然后调用它。 (请记住,调用约定是 register,而不是 stdcall。)然后加载您要调用的函数的地址,请记住该函数的名称已修改以包含一些单位和类型信息。在调用 FreeLibrary 之前调用 Finalize 函数。检查LoadPackageUnloadPackage的来源;是否需要调用 CheckForDuplicateUnits 可能取决于您是否可以满足要求 1。

关于delphi - 如何从可执行文件调用 bpl 中的 Delphi 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1394298/

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