我在delphi IDE专家工作,现在为了避免依赖性问题,我正在考虑重建这个专家作为dll专家,正如其中一个answers建议的那样,现在我的专家(编译为bpl)访问Screen
和Application
全局变量(Delphi IDE的实例),所以我想知道如果我编译我的专家作为一个DLL我仍然可以访问这些变量,我也想知道{{1 }}
答案 0 :(得分:5)
我应该将我的向导编译为DLL还是包?包更容易 无需重新启动即可加载和卸载 IDE(因此更容易调试),但是 他们可以创建单位命名冲突 在IDE中。冲突发生时 命名向导的单位与名称匹配 一个单位在另一个装载 设计时包。在这种情况下, 两个包都无法加载 同时。建议的解决方法 是为所有单位名称添加前缀 带有“唯一”前缀。 GExperts,for 例如,使用“GX_”作为名称前缀 对于它的单位。
来自this非常好的OTA来源:GExperts
答案 1 :(得分:1)
当您访问全局变量时,这些全局变量将是您的DLL的全局变量,而不是主BDS.exe的全局变量。我不确定,但我认为你的DLL将拥有自己的Screen和Application全局变量,如果你在Forms中链接,并且是VCL的核心。
属于IDE本身的东西可以通过Open Tools Api(OTA)访问。我相信你通常不会在你的专家IDE之间共享任何对象,如果你试图这样做,那将是有问题的。你所做的任何绕过OTA的东西都很容易以奇怪的方式破解,特别是在未来版本的IDE中。
依赖性问题当然是不使用基于BPL的软件包的一个重要原因,但我认为更大的原因是要保持工具内部和IDE内部的完全分离。
请记住,DLL目标(如可执行目标)是静态链接的。这是差异的核心。如果您的专家提供的功能仅使用合法的公共文档OTA接口,那么移动到DLL应该没有问题。如果您使用可能与BPL一起使用的一些后门黑客,那么我无法进一步建议您。