2

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

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

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

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

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

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

我在这里想念什么?

已解决(呃):是的,Delphi 只是被愚弄了,或者诸如此类。

我们发现了这些:

其中都提到了“Platform=BNB”设置。通过启用诊断输出,我们可以看到准确的值。所以我们尝试根据文章覆盖它,没有运气,仍然是 BNB。然后我们进入项目设置,原来它也可以在那里被覆盖,所以我们也这样做了,仍然没有运气。

结果发现 Delphi 安装程序或其他什么东西在操作系统级别添加了一个“Platform=BNB”环境变量,删除它,重新启动 Delphi,一切都很好。

嗯,和可以预料的一样。不过,我们仍然必须使用 Delphi。

4

2 回答 2

2

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

于 2009-08-14T11:35:22.037 回答
1

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

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

每当我遇到这样的问题时,我都会暴力删除项目和组件文件夹中的每个 .dcu 文件,以防万一“全部构建”不会删除所有陈旧的 .dcus。下面的重新编译要么解决了问题,要么揭示了是否使用了任何错误的 .dcu。

于 2009-08-14T11:32:31.213 回答