BPL Delphi专家和DLL Delphi专家之间有哪些区别?

4
我正在使用Delphi IDE专家进行工作,现在为了避免依赖问题,考虑像answers中建议的那样将该专家重建为dll专家。现在我的专家(编译为bpl)访问ScreenApplication全局变量(Delphi IDE实例),因此我想知道如果我将专家编译为dll,是否仍然可以访问这些变量。同时,我想知道 bpl delphi专家和dll delphi专家之间的主要区别是什么?
2个回答

5
我应该将我的向导编译为DLL还是Package?
Package更容易加载和卸载而无需重新启动IDE(因此更容易调试),但它们可能会在IDE中创建单元命名冲突。当向导的单元名称与另一个已加载的设计时包中的单元名称相同时,就会发生冲突。在这种情况下,两个包不能同时加载。建议的解决方法是为所有单元名称添加“唯一”前缀。例如,GExperts使用“GX_”作为其单元的名称前缀。
来自关于OTA的this非常好的资源:GExperts

1

当您访问全局变量时,这些将是全局变量,它们是针对您的DLL全局的,而不是针对主BDS.exe全局的。我不确定,但我认为如果您链接了Forms和VCL的核心,您的DLL将拥有自己的Screen和Application全局变量。

那些属于IDE本身的东西是通过Open Tools Api(OTA)访问的。我相信您通常不会在IDE和您的专家之间共享任何对象,即使您尝试这样做,也会出现问题。任何绕过OTA的操作都容易出现奇怪的故障,特别是在IDE的未来版本中。

依赖问题当然是不使用基于BPL的包的一个重要原因,但我认为更重要的原因是保持您的工具内部与IDE内部完全分离。

请记住,像可执行目标一样,DLL目标也是静态链接的。这是区别的核心。如果您的专家提供的功能仅使用合法的公共OTA接口,则切换到DLL应该没有问题。如果您使用一些可能存在于BPL中的后门黑客技术,那么我无法再给您建议。


3
一个 DLL 也可以使用运行时包来构建。 - Ondrej Kelle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接