首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解决Delphi包问题,其中BPLs不会加载,但您已经重新编译(Windows文件系统问题)

解决Delphi包问题,其中BPLs不会加载,但您已经重新编译(Windows文件系统问题)
EN

Stack Overflow用户
提问于 2012-08-28 14:30:13
回答 3查看 33.6K关注 0票数 12

我的主要问题是如何排除“我的BPL不会因为依赖而加载,不管我清理和重新编译了多少”。Update您可能认为您有一个干净的重新编译系统,但是由于Windows及其文件系统虚拟化错误特性的逆奇迹,您还没有。

当我试图将设计时包(在本例中名为dclFsTee.bpl)加载到Delphi (它是快速报表4 teechart包装组件包)时,它会抱怨:

代码语言:javascript
运行
复制
The program can't start because tee7100.bpl is missing from your computer. Try reinstalling ...

据我所知,在我的系统上的任何DCP或DCU文件上都没有引用tee7100.bpl。但很明显,有些地方不对劲,我找不到问题所在。

所有Delphi用户都面临着BPLs的100个“不编译或不加载”问题。当被问到该怎么做时,大家都会重复一遍,那就是清理你的电脑。

然而,我现在花了几个小时来清理我的计算机,虽然所有的东西都在编译文件,但是很明显,一定有一些过时的东西隐藏在某个地方,因为我试图加载的结果BPL文件仍然希望加载我几天前从这个系统中删除的TeeChart BPL的一个版本,以及我能找到的所有跟踪。

我删除的Delphi2007中的TeeChart内容的跟踪包括$(BDS)\Lib和$(BDS)\Lib\debug文件夹中的所有内容,以及系统上的所有DCP和BPL文件夹。另外,每个TeeChart命名的dcu文件都不见了。

一旦你走到了路的尽头,你接下来会尝试什么?(格式化硬盘,购买新电脑。)我是认真的。我认为我是个聪明人,但我有一个1TB硬盘驱动器,一个可以运行到80+文件夹的库路径,以及一个看起来组织得很好的源代码存储库,但是很明显,在我找不到它的地方隐藏着一些东西。

我有TeeChart标准2012,有完整的源代码,据我所知,我的开发机器不再包含任何旧的TeeChart BPLs或DCP文件,这些文件来自德尔菲附带的"tee图表tee7100.bpl“版本。

我已经运行了teechart附带的"recompile.exe“向导,该向导似乎只运行MSBuild并构建包,然后将{$DEFINE x}声明写入tee.inc文件(源分发版中有两个)。

但是,在某种程度上,悄悄地,似乎有一个隐式导入到其中一个包中,正在绘制一些未重新构建的陈旧文件,因此试图加载tee7100.bpl。新的bpl名称是tee911.bpl。

我没有问这个非常具体的快速报告问题,我只是把它作为一个伤害世界的具体例子,在德尔菲开发过程中,我已经面对了数十次。

我只提供快速报告的细节,这样您就可以看到,这实际上是一个通用问题的具体实例,有时在Delphi中处理组件源代码、包或包集时会遇到依赖关系。清理您的计算机,以便您的代码甚至构建可能是棘手的。

下面是我的Delphi包对包依赖解决问题:

  1. 什么是找到或跟踪隐式加载一些不需要更长时间的BPL问题的最有效方法,以便我的代码(它构建和编译得很好!)将实际加载到Delphi。运行重新编译产生的BPL文件似乎正确地链接到正确的DCP文件,并且没有旧/陈旧DCP或DCU文件存在。例如,新的DCP文件名为tee911.dcp。
  2. 您是否知道什么包实际上是过时的,以及在.bpl链接时是静态地读取、链接和导入什么?(我在想,也许是一个特殊的像地图一样的BPL文件?)

更新在与此进行了许多小时的斗争之后,使用了我所知道的每一个技巧,我意识到在Windows 7中没有文件虚拟化导致的相关问题。这意味着Windows 7对运行在其之上的程序是谎言。它给了你另一个版本的文件,这不是你想要的。这在几方面是致命的;一种是重新编译BPL,但这不是加载BPL的方式。杀死我的BPL位于SysWow64文件夹中,该文件夹是VirtualStore的一部分。请注意,虚拟商店基本上使幻影文件出现,只有当您是某个“低优先级”程序时,才会出现这些文件,而Delphi 2007在Win7 7/64位上显然是这样。要删除当前用户帐户的SysWow64 VIRTUALSTORE文件夹中的BPL文件:

代码语言:javascript
运行
复制
   del %HOMEPATH%\AppData\Local\VirtualStore\Windows\SysWow64\*.bpl

..。有时候我只是讨厌Windows架构。无论如何,我不会把上面的答案作为答案,因为我想知道是否有人有更好的方法,或任何建议或建议,可能会有帮助下次。

EN

Stack Overflow用户

发布于 2016-05-03 13:37:38

造成这种情况的另一个问题是没有将.bpl文件存储在系统路径中的文件夹。

这是因为Delphi试图使用文件名而不是绝对路径调用WinAPI函数LoadLibrary。因此,如果Windows找不到文件,Delphi就无法加载它。

有关详细信息,请参阅这个论坛帖子

这似乎是Windows 7中的一个问题,虽然在Windows 10中不是这样。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12161554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档