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所需的。但是这个问题特别询问编译时检测,在这种情况下,这些变量都不合适。这是真的,有道理。