zoukankan      html  css  js  c++  java
  • 编译指令 {$INCLUDE} + {$POINTERMATH ON}

     

    本文转自万一老师的博客

    原文出处: http://www.cnblogs.com/del/category/168694.html


    使用 {$INCLUDE} {$I} 指令管理和调用自定义函数,INC文件:
    --------------------------------------------------------------------------------
    //
    这是一个简单、方便而又实用的小技巧. 譬如这段代码中有四个定义函数: MyAddMyDecMyMulMyDiv

     
    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;

    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    //
    譬如下面四个自定义函数 *****************************
    function MyAdd(const a,b: Integer): Integer;
    begin
      Result := a + b;
    end;

    function MyDec(const a,b: Integer): Integer;
    begin
      Result := a - b;
    end;

    function MyMul(const a,b: Integer): Integer;
    begin
      Result := a * b;
    end;

    function MyDiv(const a,b: Integer): Integer;
    begin
      Result := a div b;
    end;
    //****************************************************

    //
    调用测试
    procedure TForm1.FormCreate(Sender: TObject);
    const
      x = 8;
      y = 2;
    begin
      ShowMessageFmt('%d,%d,%d,%d',[MyAdd(x,y), MyDec(x,y), MyMul(x,y), MyDiv(x,y)]);
      {
    显示结果: 10,6,16,4}
    end;

    end.
    --------------------------------------------------------------------------------
    我们可以把其中的自定义函数(也可以是其他代码)剪切保存在一个文本文件中(譬如是: C:\DelphiFun\MyFun.inc); 

    然后在原来代码的位置用 {$INCLUDE C:\DelphiFun\MyFun.inc} {$I C:\DelphiFun\MyFun.inc} 再引入即可(可以使用相对路径).

    下面是使用后的代码:
    --------------------------------------------------------------------------------
     
    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;

    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    {$I C:\DelphiFun\MyFun.inc}

    //
    调用测试
    procedure TForm1.FormCreate(Sender: TObject);
    const
      x = 8;
      y = 2;
    begin
      ShowMessageFmt('%d,%d,%d,%d',[MyAdd(x,y), MyDec(x,y), MyMul(x,y), MyDiv(x,y)]);
      {
    显示结果: 10,6,16,4}
    end;

    end.
    --------------------------------------------------------------------------------
    另外: 引入 C 语言的 obj 文件是用 {$L 路径} 指令完成的.

    //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>





    编译指令POINTERMATH默认 off; 打开后, 可以像数组一样地读写指针中的系列数据:
    --------------------------------------------------------------------------------
     
    //
    测试整数指针
    procedure TForm1.Button1Click(Sender: TObject);
    var
      p: PInteger;
      i: Integer;
    begin
    {$POINTERMATH ON}
      //
    写入
      p := GetMemory(SizeOf(Integer) * 4);
      p[0] := 11;
      p[1] := 22;
      p[2] := 33;
      p[3] := 44;

      //
    读取
      ShowMessageFmt('%d, %d, %d, %d', [p[0], p[1], p[2], p[3]]);
    {$POINTERMATH OFF}

      //
    之前有时会这么麻烦
      ShowMessageFmt('%d, %d, %d, %d', [p^, PInteger(Integer(p) + SizeOf(Integer) * 1)^,
        PInteger(Integer(p) + SizeOf(Integer) * 2)^,
        PInteger(Integer(p) + SizeOf(Integer) * 3)^]);

      FreeMemory(p);
    end;

    //
    测试结构体指针
    procedure TForm1.Button2Click(Sender: TObject);
    type
      TMyRec = record
        Name: string[12];
        Age: Word;
      end;
    var
      p: ^TMyRec;
    begin
    {$POINTERMATH ON}
      p := GetMemory(SizeOf(TMyRec) * 2);

      //
    写入
      p[0].Name := '
    张三';
      p[0].Age := 11;
      p[1].Name := '
    李四';
      p[1].Age := 22;

      //
    读取
      ShowMessageFmt('%s, %d', [p[0].Name, p[0].Age]);
      ShowMessageFmt('%s, %d', [p[1].Name, p[1].Age]);

      FreeMemory(p);
    {$POINTERMATH OFF}
    end;

  • 相关阅读:
    VMware Workstation虚拟机Ubuntu中实现与主机共享(复制和粘贴)
    虚拟机 VMware Workstation12 安装Ubuntu系统
    虚拟机 VMware Workstation12 安装OS X 系统
    ASP.NET Core学习链接
    Java开发中的23种设计模式详解
    C#线程同步的几种方法
    FTP webReq.ContentType异常的处理
    大小端 Big-Endian 与 Little-Endian
    C++:运算符重载函数之"++"、"--"、"[ ]"、"=="的应用
    C++:成员运算符重载函数和友元运算符重载函数的比较
  • 原文地址:https://www.cnblogs.com/w413133157/p/1732017.html
Copyright © 2011-2022 走看看