首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

指针有关问题请问。无法把指针地址赋值到全局变量是咋回事

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

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

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.

这样做没有任何问题!

热点排行