我有一个Delphi应用程序,我编写了一个相当简单的包装器.exe for。
基本上,有一个dll有一堆函数,其中一个我会在我的包装器完成所需的操作后迭代调用。我无法控制这个dll文件,也永远不会。
好吧,现在这个DLL是一个BPL,我不知道如何调用该文件中的函数。提前谢谢。
答案 0 :(得分:10)
使用包中函数的简单方法是“使用”包含该函数的单元,像往常一样调用它,并将包放在项目运行时包的列表中。为了实现这一目标,有一些要求:
如果您无法满足第三个要求,或者您不想一直加载包,那么您可以为其调用LoadPackage
。实现这项工作的方法是让另一个 一直加载的包。它将由您的项目和要加载的包使用。中间包将公开一个接口(例如一些注册函数,变量或类),主包可以使用它来告诉应用程序它的功能是什么。您将无法直接在应用程序中“使用”主程序包的单元。
如果你不能满足前两个要求,那么就有更难的方法,如果你的应用程序不是用Delphi或C ++ Builder编写的,那么你也需要这样做。像普通的DLL一样对待包。加载LoadLibrary
。使用GetProcAddress
加载其Initialize
函数,然后调用它。 (请记住,调用约定是register
,而不是stdcall
。)然后加载要调用的函数的地址,请记住函数的名称已经被修改为包含一些单位和类型信息。在致电Finalize
之前,请致电FreeLibrary
功能。检查LoadPackage
和UnloadPackage
的来源;是否需要致电CheckForDuplicateUnits
可能取决于您是否可以满足要求编号1。
答案 1 :(得分:2)
BPL只是一个带有一些特定添加项的DLL。你可以毫不费力地调用函数,就像你对DLL一样,有一个特别的警告:BPL必须在你正在使用的相同版本的Delphi中构建。如果您没有源代码,这可能是一个主要缺点。如果这对您来说是一个问题,您应该与创建它的人交谈并要求他们将其重新编写为DLL。
答案 2 :(得分:1)
BPL可以消除很多DLL问题。如果您可以静态链接它,边框将变得完全透明。如果必须动态加载它,则需要一个DLL样式的访问函数(通常是返回对象或接口的函数)和一些常见的类型(接口)定义。所有这些都应该由BPL的制造商提供。