加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:01:02 所属栏目:大数据 来源:网络整理
导读:我有一个Delphi应用程序,我编写了一个相当简单的包装器.exe for. 基本上,有一个dll有一堆函数,其中一个我会在我的包装器完成所需的操作后迭代调用.我无法控制这个dll文件,也永远不会. 好吧,现在这个DLL是BPL,我不知道如何在该文件中调用函数.提前致谢. 解决
我有一个Delphi应用程序,我编写了一个相当简单的包装器.exe for.

基本上,有一个dll有一堆函数,其中一个我会在我的包装器完成所需的操作后迭代调用.我无法控制这个dll文件,也永远不会.

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

解决方法

使用包中函数的简单方法是“使用”包含该函数的单元,像往常一样调用它,并将包放在项目运行时包的列表中.要做到这一点,有一些要求:

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

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

如果你不能满足前两个要求,那么就有更难的方法,如果你的应用程序不是用Delphi或C Builder编写的,那么你也需要这样做.像普通的DLL一样对待包.使用LoadLibrary加载它.使用GetProcAddress加载其Initialize函数,然后调用它. (请记住,调用约定是寄存器,而不是stdcall.)然后加载要调用的函数的地址,请记住函数的名称已经被修改以包含一些单元和类型信息.在调用FreeLibrary之前调用Finalize函数.检查LoadPackage和UnloadPackage的源代码;是否需要调用CheckForDuplicateUnits可能取决于您是否可以满足要求编号1.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读