Delphi中的条件定义限制为255个字符。这意味着如果您有超过255个字符的定义,它们将被忽略。例如。
所以条件定义的集合:
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,
不幸的是它不起作用。它不起作用的原因是你不能用条件定义替换定义;只定义直到文件结尾的最后一次。
那么,我如何克服Delphi中 Conditional Defines 的255个字符限制?
问题当然是如何定义项目级别,而共享源代码文件(共享文件位于项目之外的自己的目录中)文件夹)。
答案 0 :(得分:9)
你几乎在项目文件中有定义,但是请记住Delphi不是C - 编译器在每次编译任何内容时都不会按顺序读取每个提到的单元,就好像所有文件都粘贴在一起一样从文本上讲,项目文件中定义的内容在该文件外部不可见。
但是,Delphi 与类似,因为它支持名为include
的指令 使其在每次编译时重新读取所提到的文件。让我们用它。
首先,将所有定义放入单独的文本文件中。我们称之为 Defines.inc 。
{$DEFINE Win32API}
...
{$DEFINE Sqm}
{$DEFINE Strict}
然后将该文件包含在所有需要任何这些定义的源文件中。
program ConsotoManager;
{$R *.RES}
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'}
{$INCLUDE Defines.inc}
uses
FastMM4,
Windows,
现在,您可以清除项目选项中的列表,而是添加该文件所需的任何定义。当您更改该文件时,您可能需要进行完整构建(而不是简单的编译)才能使更改生效。
另外,考虑一下你是否真的需要这么多的编译变量。也许其中一些总是定义,因此在编译时检查它们是没有意义的。也许其中一些是多余的。
答案 1 :(得分:0)
我的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}