我正在尝试构建3个包,A,B和C.A定义了一些在B和C中使用的基类。我在同一个项目组中有所有3个,都设置为输出到相同的自定义BPL输出文件夹。这个文件夹位于B和C的搜索路径中。但是当我去构建B和C时,编译器会在Requires列表中阻塞。 “找不到所需的包'A'。”
如何告诉B和C在哪里找到A,这样他们才能正确构建?
答案 0 :(得分:14)
无法找到包,或者编译器感到困惑。在后一种情况下,重启有时会有所帮助。然后按顺序从所有包中手动构建。
如果确实找不到,请检查是否所有包(bpl和dcp)和dcu文件都可用。你需要两者。
答案 1 :(得分:9)
如果在IDE尝试加载程序包时发生这种情况:程序包输出目录(* .bpl文件所在的目录)必须位于系统的PATH环境变量中。包是静态链接的DLL,Windows必须能够找到它们才能加载它们。
如果在构建软件包时发生这种情况:任何/所有DCP输出目录(* .dcp文件所在的位置)都必须位于依赖项目的搜索路径中,以便编译器可以找到已编译的软件包。 您也可以将包项目的DCP输出目录留空 - 在这种情况下,使用Tools \ Options \ Library中设置的全局DCP输出目录;然后,依赖项目不需要将它包含在搜索路径中。
答案 2 :(得分:2)
可能在您尝试编译的包的“requires”子句中错误地指定了所需包的名称。我们来举个例子:
我们有两个软件包 - VirtualTreesR.dpk和VirtualTreesD.dpk。 VirtualTreesD需要VirtualTreesR。它们都有'16'后缀,因此它们都在Delphi项目管理器窗口中显示为VirtualTreesR16.bpl和VirtualTreesD16.bpl。您可能认为这些是包的名称,但您错了。包的名称仍然是VirtualTreesR和VirtualTreesD,而不是VirtualTreesR16和VirtualTreesD16。
当编译VirtualTreesR.dpk时,Delphi会生成两个文件(我不在这里讨论DCU)VirtualTreesR * 16 * .bpl和VirtualTreesR.dcp。看到不同?
然后我们尝试编译VirtualTreesD.dpk并得到错误:“[DCC致命错误] VirtualTreesD.dpk(35):E2202必需包'VirtualTreesR16'未找到”。
发生错误是因为VirtualTreesD.dpk包的'requires'子句包含以下行:
requires
designide,
VirtualTreesR16;
由于没有VirtualTreesR16.dcp,即使Delphi搜索路径和PATH环境变量设置正确,Delphi也会尝试查找VirtualTreesR16.dcp并失败。只有VirtualTreesR.dcp。
解决方案是修复'requires'子句,使其看起来如下所示:
requires
designide,
VirtualTreesR;
希望它有所帮助。
P.S。这是一个非常令人沮丧的问题,因为这个名称不匹配并不明显,其碎片分散在不同的设置中。如果Delphi指定了它试图找到的文件(例如'VirtualTreesR.dcp'而不是'VirtualTreesR'),Delphi可能更具体。
答案 3 :(得分:1)
我会检查以确定您在哪里编写包的.dcp文件。完成后,检查每个包的搜索路径是否有.dcp输出文件夹的条目。
答案 4 :(得分:0)
通过Delphi Project Manager上下文菜单添加所需的包时,有时会收到“找不到包”错误。 (打开包,右键单击“需要”,选择“添加引用...”命令)
相反,通过手动编辑包项目文件来添加所需的包更容易:
MyPackage.bpl
。 Ctrl+V
打开项目文件。