2011-05-19 65 views
4

我正在一个delphi IDE专家,现在为了避免依赖关系问题,我在想重建这个专家作为一个DLL专家,正如其中一个建议answers,现在我的专家(编译为bpl)访问ScreenApplication全局变量(Delphi IDE的实例),所以我想知道如果我编译我的专家作为一个DLL我仍然可以访问这些变量,我也想知道which are the main differences between a bpl delphi expert and a dll delphi expert?bpl delphi专家和dll delphi专家之间的差异

回答

5

我应该将我的向导编译为DLL还是包?无需重新启动 IDE(因此更容易调试),但是它们可以在IDE中创建单位命名冲突 ,从而使包更容易加载和卸载 。 命名向导的单元与另一个加载的设计时包中的单元名称 匹配时发生冲突。在这种情况下, 这两个软件包不能同时加载到 。建议的解决方法 将前缀为“唯一”前缀的所有单位名称 。例如,GExperts的 使用“GX_”作为其单位的名称前缀 。

this约OTA非常好的来源:GExperts

1

当你访问一个全局变量时,那些全局变量对你的DLL来说是全局的,而不是全局的BDS.exe。我不确定,但我认为你的DLL会有自己的Screen和Application全局变量,如果你链接了Forms和VCL的核心。

那些属于IDE本身的东西是通过Open Tools Api(OTA)访问的。我相信你通常不会在IDE和专家之间共享任何对象,并且如果你想这样做,那将是有问题的。任何你所做的绕过OTA的事情都会容易以奇怪的方式突破,特别是在未来版本的IDE中。

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

请记住,DLL目标,如可执行目标,是静态链接的。这是差异的核心。如果您的专家提供的功能仅使用合法的公用文档OTA接口,那么转移到DLL应该没有问题。如果您使用BPL可能的后门黑客,那么我无法进一步为您提供建议。

+3

一个DLL可以运行包将建成了。 – 2011-05-19 20:07:19