本文转自万一老师的博客

原文出处: 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;

posted on 2010-05-10 19:36  o无尘o  阅读(494)  评论(0编辑  收藏  举报