Delphi 如何克服条件定义的255个字符限制?
Delphi中的条件定义限制为255个字符。这意味着,如果定义的字符数超过255个,它们将被忽略。例如 因此,条件集定义:Delphi 如何克服条件定义的255个字符限制?,delphi,delphi-5,Delphi,Delphi 5,Delphi中的条件定义限制为255个字符。这意味着,如果定义的字符数超过255个,它们将被忽略。例如 因此,条件集定义: Win32API;AlarmServerEngineVersion27;ImNotUsingOlderSimpleThread;EnableJclExceptionTracking;SaveExceptionsToDatabase;ShowExceptionForm;SNAPIN_NEEDS_NODE_DESCRIPTOR;VIRTUAL_TREES_MOUSE_DOWN
Win32API;AlarmServerEngineVersion27;ImNotUsingOlderSimpleThread;EnableJclExceptionTracking;SaveExceptionsToDatabase;ShowExceptionForm;SNAPIN_NEEDS_NODE_DESCRIPTOR;VIRTUAL_TREES_MOUSE_DOWN_FOCUS_LAST;UseSQLServerLocking;SnapInFactoryFormClassIsOptional;Strict;SIFFCIO;Sqm
忽略最后3个定义
我需要的是一种在项目中定义条件定义的方法,而不限于255个字符
我想可能会将条件定义移动到项目源文件中,可能通过include文件包含:
program ConsotoManager;
{$R *.RES}
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'}
{$DEFINE Win32API}
...
{$DEFINE Sqm}
{$DEFINE Strict}
uses
FastMM4,
Windows,
SysUtils,
不幸的是,它不起作用。它不起作用的原因是您不能用defines替换conditional defines;仅定义文件结束前的最后一个
那么,如何克服Delphi中条件定义的255个字符限制
当然,问题是如何拥有项目级别定义,同时拥有共享的源代码文件(共享文件位于它们自己的目录中,在项目文件夹之外)。我的Delphi有点生疏,但我相信您可以创建一个表示所有其他定义的定义,所以你只需要检查一个条件
{$IF Defined(Win32API)
AND Defined(AlarmServerEngineVersion27)
AND Defined(ImNotUsingOlderSimpleThread)
AND Defined(EnableJclExceptionTracking)
AND Defined(SaveExceptionsToDatabase)
AND Defined(ShowExceptionForm)
AND Defined(SNAPIN_NEEDS_NODE_DESCRIPTOR)
AND Defined(VIRTUAL_TREES_MOUSE_DOWN_FOCUS_LAST)
AND Defined(UseSQLServerLocking)
AND Defined(SnapInFactoryFormClassIsOptional)
AND Defined(Strict)
AND Defined(SIFFCIO)
AND Defined(Sqm)
}
{$DEFINE I_AM_TOTALLY_READY}
{$IFEND}
项目文件中的定义就在这里,但请记住,Delphi不是C——编译器不会在每次编译任何内容时按顺序读取每个提到的单元,就好像所有文件都是以文本方式粘贴在一起的,因此项目文件中定义的内容在该文件之外是不可见的 然而,Delphi与C类似,它支持名为
include
的指令,该指令确实会导致它在每次编译时重新读取所提到的文件。让我们用这个
首先,将所有定义放在一个单独的文本文件中。我们称之为Defines.inc
然后将该文件包含到所有需要这些定义的源文件中
program ConsotoManager;
{$R *.RES}
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'}
{$INCLUDE Defines.inc}
uses
FastMM4,
Windows,
现在,您可以清除项目选项中的列表,并将所需的任何定义添加到该文件中。当您更改该文件时,您可能需要执行完整构建(而不是简单编译)以使更改生效
也要考虑你是否真的需要这么多编译变量。也许它们中的一些总是被定义的,所以在编译时检查它们是没有意义的。可能其中有些是多余的。
问题在于共享文件。他们拥有15年的新特性和向后兼容性,每个项目都可以选择加入或退出。如果我将{$INCLUDE Defines.inc}
添加到VirtualTrees.pas
的顶部,它将无法工作,因为它无法找到Defines.inc
(由于Defines.inc
位于我的项目的源文件夹中。即使它确实有效,我也会对库进行突破性的更改,因为其他项目都没有此Defines.inc
文件。我已经开始使defineStrict
启用其他定义。因此,您可以定义Strict
,而h将自动启用一些其他定义。我还使defineinuost
启用defineImNotUsingOlderSimpleThread
,作为保存珍贵字符的一种方式。我需要在项目中放置一个位置来放置“条件定义”它在所有编译的单元上运行;而不仅仅是在定义它们的单元的末尾。
program ConsotoManager;
{$R *.RES}
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'}
{$INCLUDE Defines.inc}
uses
FastMM4,
Windows,