请问大家什么是回调函数
用delphi或者C++给个例子不想听太多的理论 越听越晕先谢谢了!
用delphi或者C++给个例子不想听太多的理论 越听越晕先谢谢了!
解决方案 »
- Delphi空值转换
- 关于数组和指针的问题.
- 为什么用Report machine做报表,Memo的Name属性不可以修改的?
- win98下打开项目出现"非法操作"的情况!
- 还是Twebbrowser问题,高手入!
- 马上给分!如何从一个数据集中取出数据,并更新另一表中对应记录的字段值?
- Delphi7中如何解决unsafe code '@operator'和unsafe type 'Pansichar'
- 如何将DBgrid里的数字,在显示时转化为相应的汉字
- 请问什末是句柄,它有什末作用?
- 在delphi 中,如何使用 Windows 2000tr特有的 API 函数
- 这个“题库与试卷系统”倒底怎样才能正确编译啊!请各位高手指教?
- delphi 源码版本
type
TCallbackFunc = procedure ();procedure AFunc(Callback: TCallbackFunc);
begin
ShowMessage('AFunc 1');
Callback;
ShowMessage('AFunc 2');
Callback;
end;procedure MyCallback();
begin
ShowMessage('Callback function');
end;procedure TForm1.FormCreate(Sender: TObject);
begin
AFunc(MyCallback);
end;
还有到底是哪个是回调函数我还区分不开!
都在同一个程序中, 不需要stdcall申明MyCallback是回调函数。
call(调用)
program --------------------→ dll 程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数).需要回调函数的 DLL 函数往往是一些必须重复执行某些操作的函数.关系表示如下: call(调用)
program --------------------→ dll
↑ ¦
¦_______________________________¦
callback(回调)当你调用的函数在传递返回值给回调函数时,你就可以利用回调函数来处理或完成一定的操作。至于如何定义自己的回调函数,跟具体使用的API函数有关,很多不同类别的回调函数有各种各样的参数,有关这些参数的描述一般在帮助中有说明回调函数的参数和返回值等.其实简单说回调函数就是你所写的函数满足一定条件后,被DLL调用!也有这样的说法(比较容易理解):
回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事:
1. 声明;
2. 定义;
3. 设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用。
比如说,你要调用一个dll。按照一般的方法,只有主程序调用dll里面的过程。但是,如果你在dll里面要调用主程序的过程怎么办?
这就是回调,主程序把某个过程的地址告诉dll。dll需要调用时,就通过这个地址来调用。
function send_request(url){//初始化,指定处理函数,发送请求的函数
http_request=false;
//开始初始化XMLHttpRequest对象
if(window.XMLHttpRequest){//Mozilla浏览器
http_request=new XMLHttpRequest();
if(http_request.overrideMimeType){//设置MIME类别
http_request.overrideMimeType("text/xml");
}
}
else if(window.ActiveXObject){//IE浏览器
try{
http_request=new ActiveXObject("Msxml2.XMLHttp");
}catch(e){
try{
http_request=new ActiveXobject("Microsoft.XMLHttp");
}catch(e){}
}
}
if(!http_request){//异常,创建对象实例失败
window.alert("创建XMLHttp对象失败!");
return false;
}
http_request.onreadystatechange=processrequest;
//确定发送请求方式,URL,及是否同步执行下段代码
http_request.open("GET",url,true);
http_request.send(null);
}
//处理返回信息的函数
function processrequest(){//这就是回调函数,用与异步处理
if(http_request.readyState==4){//判断对象状态
if(http_request.status==200){//信息已成功返回,开始处理信息
document.getElementById(reobj).innerHTML=http_request.responseText;
}
else{//页面不正常
alert("您所请求的页面不正常!");
}
}
}
function dopage(obj,url){
document.getElementById(obj).innerHTML="正在读取数据...";
send_request(url);
reobj=obj;
}