Delphi:找不到必需的包

时间:2009-04-18 19:24:41

标签: delphi path delphi-2009 packages

我正在尝试构建3个包,A,B和C.A定义了一些在B和C中使用的基类。我在同一个项目组中有所有3个,都设置为输出到相同的自定义BPL输出文件夹。这个文件夹位于B和C的搜索路径中。但是当我去构建B和C时,编译器会在Requires列表中阻塞。 “找不到所需的包'A'。”

如何告诉B和C在哪里找到A,这样他们才能正确构建?

5 个答案:

答案 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上下文菜单添加所需的包时,有时会收到“找不到包”错误。 (打开包,右键单击“需要”,选择“添加引用...”命令)

相反,通过手动编辑包项目文件来添加所需的包更容易:

  1. 在项目管理器中选择包。例如MyPackage.bpl
  2. Ctrl+V打开项目文件。
  3. 将所需的包添加到requires子句中。
  4. 确保所需的包* .DCP文件位于包搜索路径中。