7

我想知道该项目是否是一个库,在阅读了帮助后,我编写了这个不起作用的代码:

{$IF DEFINED(LIBPREFIX)}
    {$DEFINE PROJECT_IS_EXECUTABLE}
    {$UNDEF PROJECT_IS_LIBRARY}
{$ELSE}
    {$DEFINE PROJECT_IS_EXECUTABLE}
    {$UNDEF PROJECT_IS_LIBRARY}
{$IFEND}

我试过定义、声明和

{$IF (LIBPREFIX = '')}

对于 DLL 和程序,每次尝试总是返回相同的结果。如何仅使用内置编译器指令来做到这一点?

编辑

我的目的是从“PE 文件”中删除额外的信息。

我直接在 .dpr 项目文件中执行此操作,因此无论其他单元如何编译,但我无法在 DLL 项目中执行相同操作。

因此,我正在寻找一种在 DLL 项目中阻止它的方法。

这就是我解决这个问题的方法,我将此指令添加到我的 .dpr 程序中:

  {$DEFINE STRIPE_PE_INFO}
  {$DEFINE STRIPE_RTTI}
  {$I DDC_STRIP.inc}

而 DDC_STRIP.inc 拥有所有的逻辑。

4

3 回答 3

11

编译文件时无法知道这一点。源文件可以编译为 .dcu,然后链接到任何类型的项目。RTL 和 VCL 单元就是一个很好的例子。

可能你能做的最好的事情是在你的项目选项中定义一个条件来指示项目是否是一个库。但是您需要确保在构建任何使用此单元的项目时始终重新编译 .dcu。

于 2012-10-28T19:49:29.787 回答
6

您无法在编译时确定这一点,但在运行时,您可以检查SysInit.ModuleIsLib(Delphi 2007)以确定代码是否在库(或包)中运行。

于 2012-10-28T20:25:25.173 回答
1

我能想到的最好的事情是在包含文件中设置一个定义。您可以使用预构建操作(bat 文件)来修改包含文件。

于 2012-10-28T20:21:57.587 回答