如何克服条件定义的255个字符限制?

时间:2013-07-15 17:32:07

标签: delphi delphi-5

Delphi中的条件定义限制为255个字符。这意味着如果您有超过255个字符的定义,它们将被忽略。例如。

enter image description here

所以条件定义的集合:

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个字符限制?


问题当然是如何定义项目级别,而共享源代码文件(共享文件位于项目之外的自己的目录中)文件夹)。

2 个答案:

答案 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}