type TMyZip_AddFile=Function (SrcFile,ZipFile:pchar):integer;stdcall;var
MyZip_AddFile:TMyZip_AddFile;
LibHandle:THandle;
begin LibHandle:=LoadLibrary('MyZip.dll');
MyZip_AddFile:=GetProcAddress(LibHandle,'MyZip_AddFile');//---1
@MyZip_AddFile:=GetProcAddress(LibHandle,'MyZip_AddFile');//---2
请问1,和2之间的有区别吗?我调用下来结果是一样的,语法怎么解释,编译器为什么没有抱错,我以前用第一种方式调用DLL就抱错?
MyZip_AddFile:TMyZip_AddFile;
LibHandle:THandle;
begin LibHandle:=LoadLibrary('MyZip.dll');
MyZip_AddFile:=GetProcAddress(LibHandle,'MyZip_AddFile');//---1
@MyZip_AddFile:=GetProcAddress(LibHandle,'MyZip_AddFile');//---2
请问1,和2之间的有区别吗?我调用下来结果是一样的,语法怎么解释,编译器为什么没有抱错,我以前用第一种方式调用DLL就抱错?
var
E: TNotifyEvent; @E := Button2Click; //非法,
E := Button2Click; //合法————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
@MyZip_AddFile是什么?
@@Procedure_xxx;3.过程指针与方法指针永远都是不兼容的,也就是说不能互相赋值。
方法指针就像它的名字说的那样,它是属于某个类的。所以它的定义与一般过程不同:
比如:
type TKeyPressEvent = procedure (Sender: TObject; var Key: Char) of object;
下面考虑一个例子:
private
MyButton : TButton;
MyProcedure : TKeyPressEvent;
MyAssignProcedure;
TForm1.MyProcedure(Sender: TObject; var Key: Char) of object;
begin
...
end;
TForm1.FormCreate(Sender : TObject);
begin
MyButton := TButton.Create(Application);
with MyButton do
begin
self.Parent := self;
self.Caption := 'MyTestButton';
self.OnKeyPress:= MyProcedure; //方法指针赋值
self.SetBounds(...);
...
end;
end;
并且方法指针不止是可以传给同一窗体的组件,只要可以赋值的地方都可以实现。比如:
TForm1.AssignProcedure;
beign
with TForm2.Create(nil) do
begin
...
OnPressKey := MyProcedure; //方法指针赋值
...
ShowModal;
Free;
end;
end;