如何将Delphi项目正确划分为BPL?

时间:2011-08-12 16:28:48

标签: delphi bpl

4 个答案:

答案 0 :(得分:8)

想象一下,你有一个带有EXE和两个不同BPL模块的项目,在该代码库的某个地方,有一行显示if MyObject is TStringList then DoSomething;is运算符的工作原理是检查存储在VMT中的对象的类元数据,然后通过ClassParent指针跟踪一系列VMT,看看它们是否与类引用匹配(也是VMT)指针)TStringList。为了确保这一点能正常工作,TStringList需要一个单独的VMT,在整个程序中都是一样的,无论它分成多少个BPL,这意味着它必须在自己的包中。这就是为什么像rtl * .bpl和vcl * .bpl这样的系统运行时是必要的,而且你无能为力。这是使用BPL的价格的一部分。

至于无法调试,您需要确保在启用调试信息的情况下构建BPL,并且调试器知道如何找到DCP(包含BPL的调试信息的文件)所在的文件夹。位于。并且您将无法跟踪系统BPL,因为启用了调试的DCP不随您的版本一起提供。最近我们添加了它们,我想在XE中它可能已经在D2010中了。

答案 1 :(得分:8)

答案 2 :(得分:2)

为什么我无法浏览我的源代码?有办法解决这个问题吗?

您无法浏览包中包含的单位的源代码,因为它们既不在您的项目,图书馆或搜索路径中。

configuring your search path

我解决这个问题的方法是将目录添加到项目搜索路径中。这样编译器就不知道这些文件(并且不会尝试重新编译它们),但是IDE让你浏览它们的内容并调试它们。

答案 3 :(得分:1)

“在我的exe项目设置中,我检查了”使用运行时包构建“选项

这就是为什么你不能在没有BPL等的情况下部署 - 这个选项让很多开发人员感到困惑 - “使用运行时包构建”意味着你需要在运行时使用bpl。取消选中选项和包将在compileTime链接到您的exe。 (你的exe将在g-r-o-w的大小。)“使用运行时包构建”背后的想法是保持exe的大小,并允许几个应用程序共享常见的bpl,因为它们没有链接到exe @ compileTime - 这是好处。你现在遇到的缺点 - 你必须用你的exe分发你的bpl。