bpl delphi专家和dll delphi专家的区别是什么

bpl delphi专家和dll delphi专家的区别是什么,delphi,ide,delphi-2007,toolsapi,Delphi,Ide,Delphi 2007,Toolsapi,我在一个delphi IDE专家中工作,现在为了避免依赖性问题,我想按照其中一个建议将这个专家重建为dll专家,现在我的专家(编译为bpl)访问屏幕和应用程序全局变量(delphi IDE实例),所以我想知道,如果我把我的专家编译成dll,我仍然可以使用这些变量,而且我想知道bpl delphi专家和dll delphi专家之间的主要区别是什么?当你访问一个全局变量时,这些是全局变量,对你的dll是全局的,而不是对主BDS.exe是全局的。我不确定,但我认为,如果以表单链接,DLL将有自己的屏幕

我在一个delphi IDE专家中工作,现在为了避免依赖性问题,我想按照其中一个建议将这个专家重建为dll专家,现在我的专家(编译为bpl)访问
屏幕
应用程序
全局变量(delphi IDE实例),所以我想知道,如果我把我的专家编译成dll,我仍然可以使用这些变量,而且我想知道bpl delphi专家和dll delphi专家之间的主要区别是什么?

当你访问一个全局变量时,这些是全局变量,对你的dll是全局的,而不是对主BDS.exe是全局的。我不确定,但我认为,如果以表单链接,DLL将有自己的屏幕和应用程序全局变量,并且是VCL的核心

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

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

请记住,DLL目标与可执行目标一样,是静态链接的。这就是差异的核心所在。如果您的专家提供的功能仅使用合法的公共文件化OTA接口,那么移动到DLL应该是没有问题的。如果您使用了BPLs可能的一些后门黑客,那么我不能进一步建议您

我应该将向导编译为DLL还是程序包?程序包更容易理解 在不重新启动的情况下加载和卸载 IDE(因此更易于调试),但 它们可能会造成单元命名冲突 在IDE中。冲突发生在 名称向导的单元与名称匹配 一个单位在另一个单位的负荷 设计时间包。在这种情况下,, 不能同时加载两个包 同时。建议的解决方法 是给你所有的单位名称加前缀 具有“唯一”前缀。GExperts,用于 例如,使用“GX_3;”作为名称前缀 为其单位


从关于OTA的非常好的来源:GExperts

也可以使用运行时包构建DLL。