Delphi 已将应用程序转换为BPL,现在应用程序在应用程序之前死亡。初始化

Delphi 已将应用程序转换为BPL,现在应用程序在应用程序之前死亡。初始化,delphi,bpl,Delphi,Bpl,我有一个VCL表单应用程序,其中包含对我创建的BPL文件的引用。我将BPL中框架组件的单元名添加到VCL应用程序主窗口的uses子句中。该应用程序构建得很好,但当我运行它时,它在到达项目文件中的第一行“Application.Initialize”之前就消失了。如果我从uses子句中注释掉框架的单位,应用程序将启动并正常运行 当应用程序启动时,什么可能导致致命错误 我猜在启动时加载BPL文件会有问题,但我很难找到问题所在。多谢各位 更多信息如下。。。 VCL应用程序在XE5中,我正在尝试将其转换

我有一个VCL表单应用程序,其中包含对我创建的BPL文件的引用。我将BPL中框架组件的单元名添加到VCL应用程序主窗口的uses子句中。该应用程序构建得很好,但当我运行它时,它在到达项目文件中的第一行“Application.Initialize”之前就消失了。如果我从uses子句中注释掉框架的单位,应用程序将启动并正常运行

当应用程序启动时,什么可能导致致命错误

我猜在启动时加载BPL文件会有问题,但我很难找到问题所在。多谢各位

更多信息如下。。。 VCL应用程序在XE5中,我正在尝试将其转换为BPL。整个应用程序驻留在一个TFrame控件中,该控件包含许多其他按钮和框架,这些按钮和框架允许访问应用程序的所有底层功能。这个“主框架”然后被放置在应用程序的主窗体中,除了一些菜单项之外,该窗体是空的。最初的应用程序构建并运行良好

我创建了一个新的BPL项目,并添加了这个“主框架”组件,以创建一个基本上是我的整个应用程序的BPL包,它可以像以前一样用于普通的独立exe应用程序,也可以添加到RemObjects Hydra插件模块,并最终嵌入到C#应用程序中。带有单个“主框架”组件的BPL项目构建正常,没有错误

然后,我用一个空的主窗体创建了一个新的VCL表单应用程序,并将项目的“选项->包->运行时包”设置为包含我的新BPL,并选中“与运行时包链接”选项。我在主窗体的uses子句中添加了“main frame”单元,所有内容都构建得没有错误

问题是:当我从XE5运行应用程序时,它似乎开始正常启动,但它在到达项目文件中的第一行代码“Application.Initialize;”之前就消失了。注意,我还没有编写任何代码来创建BPL中包含的“主框架”的实例。我只在uses子句中添加了它的单位。不会显示任何错误消息,也不会向XE5中的生成或输出窗口发布任何内容。如果我在uses子句中注释掉“main frame”单元,那么应用程序运行正常,并显示空的主窗口


注意:应用程序使用JVcl、NativeXml、TsiLang、ZipForge和FastReports。

您描述的症状是无法解决加载时间依赖关系的症状。根据您的描述,这很可能是由于BPL文件在加载时未找到。加载时间包依赖项由系统加载程序处理,因此DLL搜索顺序适用。通常,您会确保依赖模块与可执行文件位于同一目录中

在调试器下运行时,无法很好地处理加载时依赖性故障。如果直接启动可执行文件,您将得到更好的错误消息。如果这还不足以识别问题,请在配置文件模式下使用Dependency Walker,以获得任何加载时错误的详细诊断


关于Embarcadero关于包部署建议的最后一点意见。这位官员仍然建议将共享包安装到系统目录中。虽然这在20年前的Windows3.1下是普遍的做法,但在21世纪,任何人都不应该这样做。请不要听从Embarcadero的建议,请尊重系统目录属于系统这一事实

是的。听起来好像找不到bpl。为什么您认为应该找到它?BPL文件需要可以从系统路径或应用程序文件夹中访问。您应该确保BPL文件位于这两个位置之一。@从技术上讲,它们是使用DLL搜索顺序进行搜索的: