Delphi 2007和{$ IFDEF ...}指令未能看到我们的条件

时间:2009-08-14 11:10:37

标签: delphi delphi-2007 conditional-compilation

我们的代码库中有以下内容:组件文件:

{$IFDEF ADO}
FDatabase : TADODatabase;
{$ELSE}
FDatabase : TODBCDatabase;
{$ENDIF}

原因是对于各种遗留应用程序,将使用一种或另一种类型的数据库连接和一组类。

但是,在配置新机器时,我们的条件似乎没有被考虑在内。在项目设置中,它显示“ADO; DEBUG”,但它使用odbc类型编译上述代码。

奇怪的是它并不一致。作为同一项目的一部分构建的两个不同单元使用单独的设置。换句话说,在一个地方我们的条件是可见的,而另一个地方则不是。

编译错误的文件没有任何{$ UNDEF或类似的指令,也不包含任何文件。

我在这里缺少什么?

解决了(呃):对,德尔福只是愚蠢或其他什么。

我们发现了这些:

两者都提到“Platform = BNB”设置。通过启用诊断输出,我们可以看到确切的值。因此,我们试图根据文章覆盖它,没有运气,仍然是BNB。然后我们去项目设置,原来它也可以覆盖那里,所以我们也这样做,仍然没有运气。

原来Delphi安装程序,或者诸如此类,在操作系统级别添加了一个“Platform = BNB”环境变量,删除它,重新启动Delphi,一切都很顺利。

嗯,以及可以预期的。我们仍然需要使用Delphi。

2 个答案:

答案 0 :(得分:2)

当你改变这些条件时,你应该总是“全部建立”。

答案 1 :(得分:1)

实际上可能没有重新编译一个单元。请检查以下内容:

  • .pas文件是否包含在项目中?
  • 搜索路径中是否有另一个名称相同的文件(.pas或.dcu)? IDE可能会看到与编译器不同的文件。
  • 文件是否实际编译过?比较.pas和.dcu文件的时间戳。
  • 你为另一个平台编译吗?除非平台是“AnyCPU”,否则不会传递某些编译器选项。

每当我遇到这样的问题时,我强行删除项目和组件文件夹中的每个.dcu文件,以防万一“Build all”没有删除所有陈旧的.dcus。以下重新编译要么解决问题,要么显示是否使用了错误的.dcu。