如何将函数地址赋给变量?(100分)

  • 主题发起人 主题发起人 antdown
  • 开始时间 开始时间
A

antdown

Unregistered / Unconfirmed
GUEST, unregistred user!
type
; TMyStruct = record
; dwSize:DWORD;
end;
...
function MyTest():byte;
begin
...
end;
....
procedure DoIt;
var
; MyVar1:Dword
; MyVar2:Dword
; MyVar3:TMyStruct
begin
; MyVar1:=@MyTest; ;//明显不对,怎么做,对应于C里面的addressof
; MyVar2:=@MyVar3; ;//也不对,怎么做,对应于C里面的addressof
end;
 
就是这个吧?
 
应该是这样的吧:
procedure aaa;
begin
end;
procedure TForm1.Button1Click(Sender: TObject);
var
; a: Integer;
begin
; a := Integer(@aaa);
end;
 
建议大家先试再回贴,以上方法均无法编译通过。
 
呵呵,我就是编译后拷贝的源代码!
 
MyVar1:=DWord(@MyTest); ;
MyVar2:=DWord(@MyVar3);
 
另外,你的程序书写不规范,缺少好几个分号;
 
unit Unit1;
interface
uses
; Windows,Classes,SysUtils,MMSystem;
type
; TMyStruct = record
; lpCallBack:DWORD;
end;
type
; TMyClass=class
; private
; ; function MyFunction():Byte;
end;
implementation
{ TMyClass }
function TMyClass.MyFunction: Byte;
var
; aa:TMyStruct;
begin
; aa.lpCallBack:=integer(@MyFunction);
end;
end.
 
你有MyFunction的实现部分吗?
 
嗯,有,不过程序很怪。
 
有没有无所谓,关键是怎么把MyFunction的地址装入aa.lpCallBack
答完就给分了。
 
答案很怪,我实验通过,不知道具体结果?!
function TMyClass.MyFunction: Byte;
var
; aa: TMyStruct;
begin
; aa.lpCallBack := integer(@TMyClass.MyFunction);
end;
 
aa.lpCallBack:=integer(@TMyClass.MyFunction);
 
偶学校该死的代理,让偶总是。。。
 
谢谢两位!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
948
import
I
后退
顶部