如果您计划编写可以与多个版本的Delphi编译器一起使用的Delphi代码,您需要知道您的代码是在哪个版本下编译的。
假设您正在编写自己的商业自定义组件。组件的用户可能具有与您不同的Delphi版本。如果他们试图重新编译组件的代码,您的代码可能会有麻烦!如果在函数中使用默认参数,而用户拥有Delphi 3,该怎么办?
编译器指令是我们可以用来控制Delphi编译器特性的特殊语法注释。Delphi编译器有三种类型的指令:开关指令、参数指令和条件指令。条件编译允许我们根据设置的条件有选择地编译部分源代码。
$IfDef编译器指令启动条件编译部分。
语法如下所示:
{$IfDef DefName} ... {$Else} ... {$EndIf}DefName表示所谓的条件符号。Delphi定义了几个标准的条件符号。在上面的“代码”中,如果定义了DefName,则编译$Else以上的代码。
$IfDef指令的一个常见用途是测试Delphi编译器的版本。下表显示了为特定版本的Delphi编译器有条件编译时要检查的符号:
通过了解上述符号,就可以通过使用编译器指令为每个版本编译适当的源代码来编写与多个版本的Delphi协同工作的代码。
注:例如,符号VER185用于表示Delphi2007编译器或早期版本。
对于每一个新的Delphi版本来说,向语言中添加几个新的RTL例程是非常常见的(也是可取的)。
例如,Delphi 5中引入的IncludeTrailingBackslax函数在字符串的末尾添加“\”,如果该字符串还不存在。在Delphi MP3项目中,我使用了这个函数,有几位读者抱怨说他们不能编译这个项目,因为他们在Delphi 5之前有一些Delphi版本。
解决此问题的一种方法是创建此例程的您自己的版本—AddLastBackslax函数。如果项目应在Delphi 5上编译,则调用IncludeTrailing反斜杠。如果使用了一些以前的Delphi版本,那么我们将模拟IncludeTrailingBackslax函数。
它可能看起来像:
function AddLastBackSlash(str: string) : string; begin{$IFDEF VER130} Result:=IncludeTrailingBackslash(str) ; {$ELSE}if Copy(str, Length(str), 1) = "\" then Result := str else Result := str + "\"; {$ENDIF}end;当您调用AddLastBackSlash函数时,Delphi会计算出该函数的哪一部分应该使用,而另一部分只是跳过。
Delphi 2007使用VER180以保持与Delphi 2006的非破坏性兼容性,然后添加VER185以进行开发,无论出于何种原因,该开发特别需要以Delphi 2007为目标。注意:任何时候,当一个单元的接口改变时,使用该单元的代码都必须重新编译。
Delphi2007是非破坏性版本,这意味着Delphi2006中的DCU文件将按原样工作。
...机指令的集合,而目标代码是机器语言中的语句序列,是编译器或汇编程序转换源代码后的输出。 目录 1. 概述和主要区别 2. 什么是源代码 3. 什么是目标代码 4.源代码和目标代码的相似性 5. 并行比较-源代码与目标代码的表格形...
...的指令被编写、编辑并保存在文本文件中。然后一个叫做编译器的程序处理这些文件。这将生成程序的可执行版本。指令的文本文件称为源代码。实际上可以在计算机上运行的程序版本称为二进制或可执行文件。 这是事件的一...
...FSB(前端总线)速度是780mt/sec。安腾的一个特点也是智能编译器。编译器是用来编译和执行程序的软件。Xeon微处理器采用X86体系结构。这是最新的,并持有一个伟大的水平在市场上。这种微处理器有双核和多核两种。在双核中...
...兴趣时,我们必须处理资源脚本文件(.rc)、Borland资源编译器工具和其他文件。 在可执行文件中包含多个二进制文件包括5个步骤: 创建和/或收集要放入exe的所有文件。 创建描述应用程序使用的资源的资源脚本文件(.rc)...
希望掌握Delphi编程语言的初学者应该已经熟悉Microsoft Windows的基础知识。学习Delphi是最容易的,如果你从一个有指导的、基于教程的参考框架来学习它。 基本概念 从一堂历史课开始,介绍(Turbo)Pascal到Delphi 2005的演变,例...
...例中,星号表示PAS文件名的根,而不是“任何文件”。此编译器指令告诉Delphi包含此项目的资源文件,如其图标图像。 “开始和结束” “开始”和“结束”块是项目的主要源代码块。 “初始化” 虽然“Initialize”是在主...
...。 正如您将看到的,单元必须采用预定义的格式,以便编译器能够读取它们并编译单元代码。 单元头以保留字unit开头,后跟单元名称。当我们在另一个单元的uses子句中引用该单元时,需要使用该单元的名称。 接口部分 ...
...用程序。{$APPTYPE CONSOLE}指令(相当于/CC命令行选项)告诉编译器生成一个控制台应用程序。 uses关键字通常会列出该单元使用的所有单元(作为项目一部分的单元)。如您所见,默认情况下包含SysUtils单元。另一个单位也包括在...
阅读全文,了解如何反编译Delphi应用程序。 相关的: 在Delphi程序的EXE中嵌入资源 动态链接库(DLL)和Delphi 免费源代码Delphi项目
...自动神奇地分配给您。当函数退出时(有时甚至由于Delphi编译器优化而提前退出),变量的内存将自动神奇地释放。 默认情况下,堆栈内存大小对于您的Delphi程序(尽管很复杂)来说是足够大的。项目链接器选项上的“最大堆...