我可以使包中的 `requires` 子句有条件吗?

Can I make the `requires` clause in a package conditional?

我正在使用 Anders Melander 的 DragDrop 包。
它在 Win32 模式下工作正常,但需要针对 64 位进行调整。
我通过添加 {$IFNDEF CPUX64} 来注释掉对 designIDE 的引用来做到这一点。

但是当我从

更改包源时
requires
  rtl,
  DesignIDE;

requires
  rtl
  {$IFNDEF CPUX64} ,DesignIDE{$ENDIF};

编译器简单地丢弃了包源中的DesignIDE行,只留下:

requires
  rtl;

在 X64 上工作正常,但在我为 32 位重建后立即中断。

有没有一种方法可以让一个包包含用于 win32 的设计时项目以及用于 X64 的冲突项目 IFDEF?或者我是否被迫为 X64 创建一个单独的运行时包?

不,您不能在任何项目主文件中使用条件语句。 IDE 拥有并控制它,并且可以丢弃(甚至破坏)您使用条件进行的任何自定义。您将需要为此创建第二个包,这是使用 DesignIDE 的正常做法。即使不是为了支持 64 位,您也不允许使用任何应用程序部署 DesignIDE。它的唯一目的是与 IDE 集成,出于法律原因,它只能驻留在设计时包中。

还请记住,设计时包必须 是 Win32,因为 Delphi IDE 只有 32 位。然后,运行-Time 包可以是任何你希望支持的平台(即 Win64),当然只要它被它可能使用的任何框架支持。