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

Delphi 2007和{$IFDEF…}指令未能看到我们的条件,delphi,delphi-2007,conditional-compilation,Delphi,Delphi 2007,Conditional Compilation,我们在代码库中的组件文件中包含以下内容: {$IFDEF ADO} FDatabase : TADODatabase; {$ELSE} FDatabase : TODBCDatabase; {$ENDIF} 原因是,对于各种遗留应用程序,将使用一种或另一种类型的数据库连接和一组类 然而,在配置新机器时,似乎没有考虑我们的条件。在项目设置中,它说“ADO;DEBUG”,但它用odbc类型编译上述代码 奇怪的是它并不一致。作为同一项目的一部分构建的两个不同单元使用单独的设置。换句话说,在一个地方我

我们在代码库中的组件文件中包含以下内容:

{$IFDEF ADO}
FDatabase : TADODatabase;
{$ELSE}
FDatabase : TODBCDatabase;
{$ENDIF}
原因是,对于各种遗留应用程序,将使用一种或另一种类型的数据库连接和一组类

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

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

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

我错过了什么

解决了(呃):对,德尔福只是被愚弄了,或者诸如此类

我们发现:

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

事实证明,Delphi安装程序(或诸如此类)在操作系统级别添加了一个“Platform=BNB”环境变量,删除了该变量,重新启动Delphi,一切正常


好吧,正如预期的那样。不过我们仍然必须使用Delphi。

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

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

每当遇到这样的问题时,我都会强制删除项目和组件文件夹中的每个.dcu文件,以防“全部编译”无法删除所有过时的.dcu。以下重新编译要么解决了问题,要么显示是否使用了任何错误的.dcu。

您应该始终进行“全部编译”当您更改这些条件时。

我们会这样做,这显然不是问题所在,请参阅我更新的问题。文件已编译,因为我们可以在两部分中插入不可编译的代码,其中一部分将导致编译失败,但请参阅我更新的问题。