读书人

指针有关问题请问。无法把指针地址赋值

发布时间: 2012-05-07 12:40:40 作者: rapoo

指针问题请教。无法把指针地址赋值到全局变量是怎么回事?
同函数内的变量赋值正常。一赋值给全局变量就出错了

type
PProcedure = ^TProcedure;
var
g1: TProcedure;


function .........
var
t1: TProcedure;
p1: PProcedure;
begin
.....
t1 := p1^;//不出错

g1 := p1^;//出错
end;



---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 005A0408 in module 'Project1.exe'. Read of address 00000020'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------


[解决办法]
只要P1正确有效,这样赋值没任何问题,所以你的错误不出在上面的代码里.
[解决办法]
unit uPeocedure;

interface

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

type
PProcedure = ^Tprocedure;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure TestProcedure;
public
{ Public declarations }
end;

var
Form1: TForm1;
gp: TProcedure;
implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.TestProcedure;
begin
ShowMessage('ok');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
p: TProcedure;
pPro: PProcedure;
begin
pPro := PProcedure(@TForm1.TestProcedure);
p := TProcedure(pPro);
p;
gp := TProcedure(pPro);
gp;
end;

end.

这样做没有任何问题!

读书人网 >.NET

热点推荐