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

Ian*_*oyd 5 delphi delphi-5

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

在此输入图像描述

所以条件定义的集合:

Win32API;AlarmServerEngineVersion27;ImNotUsingOlderSimpleThread;EnableJclExceptionTracking;SaveExceptionsToDatabase;ShowExceptionForm;SNAPIN_NEEDS_NODE_DESCRIPTOR;VIRTUAL_TREES_MOUSE_DOWN_FOCUS_LAST;UseSQLServerLocking;SnapInFactoryFormClassIsOptional;Strict;SIFFCIO;Sqm
Run Code Online (Sandbox Code Playgroud)

最后3个定义被忽略.

我需要的是一种在项目中定义条件定义的方法,而不限于255个字符.

我想可能将条件定义移动到项目源文件,可能包含在include文件中:

program ConsotoManager;

{$R *.RES}
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'}
{$DEFINE Win32API}
...
{$DEFINE Sqm}
{$DEFINE Strict}

uses
  FastMM4,
  Windows,
  SysUtils,
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用.它不起作用的原因是你不能用条件定义替换定义; 仅定义直到文件结尾的最后一个.

那么,我如何克服Delphi中条件定义的255个字符限制?


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

Rob*_*edy 9

你几乎在项目文件中有定义,但是请记住Delphi不是C - 编译器在每次编译任何内容时都不按顺序读取每个提到的单元,就好像所有文件都是文本粘贴在一起一样,所以在该文件外部将看不到项目文件中定义的内容.

然而,德尔福像C,它支持一个名为指令include不会导致它重新读取每个编译所提到的文件.让我们用它.

首先,将所有定义放入单独的文本文件中.我们称之为Defines.inc.

{$DEFINE Win32API}
...
{$DEFINE Sqm}
{$DEFINE Strict}
Run Code Online (Sandbox Code Playgroud)

然后将该文件包含在需要任何这些定义的所有源文件中.

program ConsotoManager;

{$R *.RES}
{$R '..\Resource\Wumpa.res' '..\Resource\Wumpa.rc'}
{$INCLUDE Defines.inc}

uses
  FastMM4,
  Windows,
Run Code Online (Sandbox Code Playgroud)

现在,您可以清除项目选项中的列表,而是将所需的任何定义添加到该文件中.更改该文件时,可能需要执行完整构建(而不是简单的编译)才能使更改生效.

另外,考虑一下你是否真的需要这么多的编译变量.也许其中一些总是被定义,所以在编译时检查它们是没有意义的.也许其中一些是多余的.


Hav*_*ard 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}
Run Code Online (Sandbox Code Playgroud)