Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何在编译时判断项目是程序还是库?_Delphi_Compiler Directives - Fatal编程技术网

Delphi 如何在编译时判断项目是程序还是库?

Delphi 如何在编译时判断项目是程序还是库?,delphi,compiler-directives,Delphi,Compiler Directives,在阅读帮助后,我试图知道该项目是否是一个库,我编写的代码不起作用: {$IF DEFINED(LIBPREFIX)} {$DEFINE PROJECT_IS_EXECUTABLE} {$UNDEF PROJECT_IS_LIBRARY} {$ELSE} {$DEFINE PROJECT_IS_EXECUTABLE} {$UNDEF PROJECT_IS_LIBRARY} {$IFEND} 我尝试定义、声明和 {$IF (LIBPREFIX = '')} 对于D

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

{$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拥有所有逻辑。

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


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

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

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

为了同样的正确性,
系统。IsLibrary
是您在运行时检测DLL所需的。但是这个问题特别询问编译时检测,在这种情况下,这些变量都不合适。这是真的,有道理。