Delphi :未找到所需的软件包

ldxq2e6h  于 2023-06-29  发布在  其他
关注(0)|答案(6)|浏览(216)

我正在尝试构建3个包,A,B和C。A定义了一些在B和C中使用的基类。我把这3个文件放在同一个项目组中,都设置为输出到同一个自定义BPL输出文件夹。此文件夹位于B和C的搜索路径中。但是当我构建B和C时,编译器在Requires列表上阻塞。“未找到所需的程序包'A'。”
我如何告诉B和C在哪里可以找到A,这样他们就可以正确地构建了?

kiz8lqtg

kiz8lqtg1#

找不到包,或者编译器出错。在后一种情况下,重新启动有时会有所帮助。然后按顺序从所有包手动构建。
如果确实找不到,请检查是否所有包(bpl和dcp)和dcu文件都可用。你两样都需要。

f5emj3cl

f5emj3cl2#

如果在IDE尝试加载包时发生这种情况:你的包输出目录(.bpl文件所在的目录)必须在你系统的PATH环境变量中。包是静态链接的DLL,Windows必须能够找到它们才能加载它们。
如果在构建包时发生这种情况:任何/所有的DCP输出目录(
.dcp文件所在的目录)都必须在依赖项目的搜索路径中,这样编译器才能找到编译后的包。您也可以将软件包项目的DCP输出目录保留为空-在这种情况下,将使用Tools\Options\Library中设置的全局DCP输出目录;依赖项目就不需要将其包含在搜索路径中。

pes8fvy9

pes8fvy93#

可能是您试图编译的包的“requires”子句中指定的必需包的名称不正确。让我们举一个例子:
我们有两个包- VirtualTreesR.dpk和VirtualTreesD. dpk。VirtualTreesD需要VirtualTreesR。它们都有'16'后缀,所以它们都显示在 Delphi 项目管理器窗口中,作为VirtualTreesR16.bpl和VirtualTreesD16.bpl。您可能认为这些是软件包的名称,但您错了。软件包的名称仍然是VirtualTreesR和VirtualTreesD,而不是VirtualTreesR 16和VirtualTreesD 16。
当编译VirtualTreesR.dpk时, Delphi 生成两个文件(这里我不讨论DCU):VirtualTreesR16.bpl和VirtualTreesR. dcp。看出区别了吗
然后我们尝试编译VirtualTreesD.dpk并得到错误:“[DCC致命错误] VirtualTreesD.dpk(35):E2202未找到所需的包“VirtualTreesR 16”。
发生错误的原因是VirtualTreesD.dpk包的“requires”子句包含以下行:

requires
      designide,
      VirtualTreesR16;

Delphi 尝试查找VirtualTreesR16.dcp,即使Delphi搜索路径和PATH环境变量设置正确,也会失败,因为没有VirtualTreesR16.dcp。只有VirtualTreesR. dcp。
解决方案是修复'requires'子句,使其看起来像下面的:

requires
      designide,
      VirtualTreesR;

希望能帮上忙。
这是一个相当令人沮丧的问题,因为这个名称不匹配并不明显,它的片段分散在不同的设置中。 Delphi 可以更具体,如果它指定什么文件,它试图找到(例如)。'VirtualTreesR.dcp'而不是'VirtualTreesR')。

bmp9r5qi

bmp9r5qi4#

我会检查以确保您在哪里为软件包编写.dcp文件。一旦你有了这个,检查每个包的搜索路径有一个.dcp输出文件夹的条目.

knsnq2tg

knsnq2tg5#

当通过 Delphi 项目管理器上下文菜单添加所需的软件包时,我有时会收到“未找到软件包”错误。(打开一个包,右键单击“需要”,选择“添加引用...”命令)
相反,通过手动编辑包项目文件来添加所需的包会更容易:
1.在“项目管理器”中选择包。例如MyPackage.bpl

  1. Ctrl+V打开项目文件。
    1.将所需的包添加到requires子句。
    1.确保所需的包 *.DCP文件位于包搜索路径中。
yuvru6vn

yuvru6vn6#

对我来说,这个错误发生在包“A”是使用32位构建的,但包“B”(需要包“A”)试图使用64位构建时。
DCP和BPL文件都在那里(只是在错误的体系结构中),所以错误消息非常令人困惑。

相关问题