• 编译指令 {$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;

  • 相关阅读:
    PHP下编码转换函数mb_convert_encoding与iconv的使用说明
    腾讯视频嵌入网页的方法 腾讯视频网页嵌入代码方法
    Agile工作方法
    居然有这种操作?各路公司面试题(作者:马克-to-win)
    IBM QMF下载
    AIX 常用命令 第一步(uname,lspv)
    TeraTerm下载
    TeraTerm设定(解决日文乱码问题)
    TeraTerm设定(窗体大小,字体字号)保存为默认值
    view class source code with JAD plugin in Eclipse
  • 原文地址:https://www.cnblogs.com/w413133157/p/1732017.html
Copyright © 2020-2023  润新知