请老大来讲课~(150分)

  • 主题发起人 主题发起人 完颜康
  • 开始时间 开始时间

完颜康

Unregistered / Unconfirmed
GUEST, unregistred user!
有个问题俺又不懂了,有这样几个定义
TTTxxxx = Procedre(aCxxx : String);//这个定义是什么?TTTxxxx是什么呢
TT:TTTxxxx//这个TTTxxxx还能定义别人 这个TT这个时候代表了什么呢?
TT还可以用个过程来赋值,这样 TT := aProcedure//这是个过程,参数到是和
第一行的那个Procedure一样
 
TTTxxxx是一个特殊的指针类型
他指向的内存区域是一个过程的起点
这个过程调用起来,参数就是: Procedure 过程(aCxxx : String);
TT:TTTxxxx,TT就是一个变量了,他可以存储上面讲的过程的起点地址
TT := aProcedure 就是把过程aProcedure的起点地址赋给TT了
 
地址是给了,会不会执行那个过程呢?
这么做的目的是什么,是不是要执行那个过程,好处又是什么?大虾,再具体点
 
好处当然很多了,据个例子,回调函数
procedure my_proc(tt:TTTxxxx);
begin
……
tt('abcd');
……
end;
my_proc中可能需要回调用户的进程,通知用户完成某些工作
比如api,CreateThread,其中的lpStartAddress就是一个过程的地址,操作系统创建一个线程之后
九调用这个地址
很多……
TList.Sort过程 参数 Compare 就是一个回掉函数地址,因为TList保存的数据是你自己定义的
要他排序,他也不知道哪个大哪个小,你给他一个回掉函数的地址,系统每次比较的时候
都回调你的函数,问你这2个你自己的数据究竟哪个大
 
pipi太牛了.絕對高手
 
楼上的哥几个也别拍马P~~当真PiPi讲课咱们在下面听啊~大家有什么知道的都说说吧
~PiPi不是说很多~那......
还有这些东东老师是和谁学的,有没有资料、例子什么的~~
 
找一本讲Pascal语法的书,都有的。
除了一般的过程指针、函数指针,还有对象方法指针等等。
请参考Delphi的帮助(method pointers &amp
procedure pointers)
 
关于这个问题,我觉得creation-zy就已经指出方向了,看看里面的东西就明白了.

仿效PiPi,举一个十分有用的例子: (动态调用dll)

例如有一个TableReader.dll, exports一个 function SetGphData(i : integer) : integer;
那么在动态调用的时候要

type
Tfunction = function(i : integer) : integer;

var
hwdHand:THandle;
grpFunc:Tfunction

intReturn : integer;
begin
hwdHand := LoadLibrary('TableReader.dll');
try
if hwdHand=0 then
showmessage('Load dll Error!')
else
begin
@grpFunc := GetProcAddress(hwdHand,'SetGphData');
if @grpFunc=nil then
showmessage('Load Function Error!')
else
intReturn := grpFunc(2);
end;
finally
FreeLibrary(hwdHand);
end
 
多人接受答案了。
 
后退
顶部