Delphi中使用@取函数地址的问题(转)

Delphi中使用@取函数地址的问题

例如以下代码:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;
type
  TForm1 = class(TForm)
    procedure one();
    function two(x,y:integer):integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.one();
var
  p : pointer;
begin
  p:[email protected];
end;
function TForm1.two(x,y:integer):integer;
begin
  Result:=x+y;
end;
end.

在Delphi5中,没有任何问题,到了delphi7、2007、2009中就会报错:需要变量(Delphi6没试)
原因是新版本中要求返回函数地址的函数必须是全局函数,所以程序要改成这样:
................................
var
  Form1: TForm1;
  function two(x,y:integer):integer;
................................
function two(x,y:integer):integer; ......

时间: 2024-10-07 06:06:34

Delphi中使用@取函数地址的问题(转)的相关文章

delphi中的Format函数详解

首先看它的声明:[[email protected]][@21ki!] function Format(const Format: string; const Args: array of const): string; overload;[[email protected]][@21ki!] 事实上Format方法有两种形式,另外一种是三个参数的,主要区别在于它是线程安全的,[[email protected]][@21ki!]但并不多用,所以这里只对第一个介绍:[[email protect

Delphi中分隔字符串函数的使用

下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer; 第一个参数是分隔符,可以是多个,例如 [';',',',':'] 可以按分号.逗号.分号来同时分割. 第二个参数是开头被忽略的字符,例如['<','>',''],被分割出的字符,如果开头有

程序运行 栈帧分析 以及 修改栈帧中数据以及函数地址

1 在栈帧中 修改函数调用地址 使得程序运行 跳转到 自己指定的函数 而原程序的作者完全不知道这段程序的执行中已经执行了别人的代码[可能是恶意的] 2 修改栈帧中的变量的值 不通过变量名 如 修改变量b的值 不通过变量b的名称 [这需要对变量在栈帧中的分布有一定的了解 ] 压栈是 a先压栈 b后压栈 压栈时 栈顶向低地址方向前进 变量a在变量b的上面 变量a的地址 0xbfa92d88 变量b的地址 0xbfa92d84

delphi中的copy函数和pos函数

1.copy('csdn',1,2) 返回的结果是 cs 注释: Copy有3个参数,第一个是要处理的字符串,第二个是要截取的开始位置,第三个是截取位数 当第三个参数大于字符长度,那么效果就是取开始位置 后的所有字符 2.Pos('3','123456') 返回的结果是 3 注: 取出子串在父串中第一次出现的位置

Delphi中的Rtti函数

TTypeKind,类型类别,tkclass,tkinteger,tkstring等.类,属性都是一种类型. ttypedata,是一个record包括ttypekind.是一个类的描述.TTypeKing只是这许多描述中的一种. GetTypeData函数,获取类的相关信息,当然也包括属性的信息,比如属性published中的proptery的个数等 GetPropList,获取属性信息列表,包括属性名,属性的类型等 GetPropInfo/GetPropInfos 获取类的属性的相关信息,功

Delphi 中的 IfThen 函数

问题来源: http://www.cnblogs.com/del/archive/2008/11/14/1120015.html#1370413 StrUtils 单元和 Math 单元 分别有一个 IfThen 函数(注意参数是数字还是字符串), 举例: StrUtils 单元和 Math 单元 分别有一个 IfThen 函数, 举例: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Grap

FastReport调用Delphi中的自定义函数

//定义一个函数: function SmallToMoney(akey: real): string; begin   //'1234500' end; //此处为fastreport加载自定义函数以便引用 procedure Tprint_from.FormCreate(Sender: TObject);begin  frxReport1.AddFunction('function SmallToMoney(akey: real): string;', 'Myfunction', '函数功能

linux中如何取ip地址

使用命令:awk .sed注意:要注意!正则有使用规则的!先看ip地址,使用命令:ifconfig eth0 |awk 'NR==2' / ifonfig eth0 |sed -n '2p'输出结果:省略一下,可以自己去试一下. ifconfig eth0 |awk 'NR==2' -F "[: ]+" '{print$4}' ifconfig eth0 |sed -nr '2s#^.(.) Bc.$#\1#gp' 难点在于要理解正则和三剑客配合使用的原因.需要多多在xshell上练习

C++ 获取类成员函数地址方法 浅析

C语言中可以用函数地址直接调用函数: void print () { printf ("function print"); } typdef void (*fun)(); fun f = print; f(); C++中类非静态成员函数必须通过实例去调用,C++中类成员函数调用: class test { public: void print () { printf ("function print"); } }; 我们同样可以通过定义函数指针来调用如下: type