指针问题请教。无法把指针地址赋值到全局变量是怎么回事?
同函数内的变量赋值正常。一赋值给全局变量就出错了
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.
这样做没有任何问题!