4

我在 Delphi XE2 版本 16.0.4429.46931 中有一个组件包,同时是运行时和设计时包。这个包已经存在一年多了,文件/文件夹结构一直都是一样的。我将所有单元保存在根目录的专用Source文件夹中,并将实际包保存在Packages同一根目录的文件夹中。因此,可以在 中找到包,在 中找到\Root\Packages\单元\Root\Source\

今天,在构建运行时包之后,我正在查看提示和警告。其中一个警告是:

[DCC Warning] Inno.TimeChart.pas(1): W1025 Unsupported language feature: 'class constructor'

警告本身并不是我担心的。问题是当我双击此警告时,我从 IDE 收到一条错误消息:

IDE 错误信息

我立即注意到的一件事是它不是在Source文件夹中查找,而是直接在文件夹中查找Packages。不知何故,IDE 期望该单元与包位于同一位置。自从我一年多前创建包以来,我从未更改过任何库路径、文件位置或包的结构。

该文件确实存在,但位于与看起来不同的位置。该文件从未与项目一起保存在文件夹中,事实上,除了包项目本身之外,没有其他任何东西保存在该Packages文件夹中。这一切都驻留在Source文件夹中,但 IDE 似乎不这么认为。

为什么 IDE 会认为该文件位于不同的文件夹中?当我双击它们时,与同一单元相关的所有其他提示和警告都可以正常工作,但不是这个。

编辑

我创建了一个新的测试包来解决这个问题。

Root\TestPackage.dpr
Root\Source\TestPackageUnit.pas

导致此编译器警告的特定代码在此类中:

type
  TMyComponent = class(TComponent)
  strict private
    class constructor Create;
  end;

当我使用 Process Monitor 进行编译时,我看到 IDE 正在 30 多个不同的地方搜索这个文件(当然失败了),它看起来像是在每个库路径中搜索,而不是在包所说的那个地方。

我尝试过的事情

  1. DPR已验证和DPROJ文件之间的这些路径之间没有区别
  2. 安装了所有最新的更新和 IDE FixPack(实际上给了我新的问题)
  3. 使用 Process Monitor 监控文件的访问
    1. 过滤器:进程名称等于BDS.exe;路径以TestPackageUnit.pas
    2. 结果:“未找到名称”-> 所需访问:通用读取处置:打开选项:同步 IO 非警报、非目录文件属性:N 共享模式:读取、写入分配大小:n/a
  4. 尝试使用仅设计时、仅运行时和设计时/运行时组合
  5. 尝试使用已注册和未注册的组件
  6. 尝试使用库路径中的目录而不是库路径中的目录
  7. 从库路径中删除了大约 20 个不必要的条目以使其更短
  8. 将目录移动到库路径的顶部
  9. 已验证没有DOF与项目关联的文件(我认为来自旧版本)
  10. 重启IDE和电脑的次数
  11. 从项目中清理已编译和临时文件,包括 BPL 和 DCU 文件
  12. 改为strict private公正private和均匀public
4

3 回答 3

3

当 delphi 搜索路径列表太长时,我确实遇到了这样的问题。我总是可以帮助自己将相关目录更多地移到前面,即在列表中。

于 2012-12-27T09:03:21.407 回答
1

检查该文件是否未添加到项目文件(dpr 或 dpk)中。项目 - 查看源代码将显示该文件。

如果不是这种情况,请尝试在项目中的所有文件中搜索文件名并查看出现了什么。

于 2012-12-30T07:37:46.967 回答
1

在另一个网站上找到了这个:

还有另一个可能与您的问题有关的 QC。 http://qc.embarcadero.com/wc/qcmain.aspx?d=87693

转到 Project Options -> Delphi Compiler -> Output C/C++ 并在 C/C++ output file generation 下选择 Generate DCUs only。

达莉娅·普拉斯尼卡

资料来源:http ://codeverge.com/embarcadero.delphi.general

于 2014-10-29T00:48:42.960 回答