回调函数和我们一般的函数有什么区别到底?难道区别就在于回调函数是操作系统调用的?
回调函数调用一般的函数吗?一般的函数是谁调用的
比如声明了WINAPI(__stdcall)是回调函数吗?比如这个DWORD WINAPI CAccess_to_opsrvDlg::udp_SendProc(LPVOID lpParamer)
回调函数调用一般的函数吗?一般的函数是谁调用的
比如声明了WINAPI(__stdcall)是回调函数吗?比如这个DWORD WINAPI CAccess_to_opsrvDlg::udp_SendProc(LPVOID lpParamer)
解决方案 »
- 1/2为何会这样!
- 求救呀,运行过程中出现的问题!!!!,请大家看看
- 开发网络程序时 WSAAsyncSelect需不需要放到一个子线程中来处理,我担心如果一旦接收的数据量大而且频繁 会影响主线程的响应?? 此外 WSA
- 请问:用什么可以判断一个文本文件是否结束
- ATL中怎样才能导出一个类啊?就象引入msado15.dll后,可以直接使用_ConnectionPtr一样。
- 回答有用的都给分,关于将程序调到前台。
- 这个怎么改,到double volume那怎么调用Rectangel类的似有成员Length和Width,不胜感激
- 菜鸟提问,请高手指教
- 关于MFC自绘PNG按钮的问题
- TeeChart控件
- 【顶】【顶】【顶】【顶】能否提供一个贴图的功能??
- 关于窗口的风格
2)操作系统使用的回调函数要声明为__stdcall,这是操作系统的约定而已;实际应用中也可以定义为__cdecl的格式。
例如:typedef int (*CALL_BACK)(char*);int Test(char* pTest)
{
printf("%s", pTest);
return 0;
}void TestCallBack(CALL_BACK fun)
{
fun("Test");
}
int main(char** arv, int argc)
{
TestCallBack((CALL_BACK)Test);
return 0;
}
=====================================================
在定义和写法上没有什么区别,关键字CALLBACK和WINAPI之类的东西也不过就是一些宏定义罢了,它的区别就是楼主说的,它的调用并不是由编程者自己在某个地方显式调用,而是由系统在适当的时候加以调用,它的参数也是由系统以合适的值传给它。比如定时器的回调函数,窗口处理函数,钩子的回调函数,最大的区别就是由系统来调用。回调函数调用一般的函数吗?一般的函数是谁调用的
=========================================
第一句话没看懂,至于一般函数当然是编程者自己在某个地方显式调用了。比如声明了WINAPI(__stdcall)是回调函数吗?比如这个DWORD WINAPI CAccess_to_opsrvDlg::udp_SendProc(LPVOID lpParamer)
===================
是不是回调函数并不是你自己对函数如何定义,回调函数用在什么地方,如何用,参数怎么写是系统决定的,并不是编程者决定的,比如WH_KEYBOARD钩子的回调函数,系统定义了它的格式和参数是下面这个样子的:
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
);
所以你上面这个函数是不是回调函数,关键看它用在什么地方。不过你上面这个函数是不可能作回调的,因为类的非静态成员函数不能作回调函数。
回调函数和普通函数没有区别当计算机执行函数调用的时候,是通过call 函数所在地址这种方式来执行的当程序自己知道函数地址,如程序内部的函数,就是普通调用,当要外部提供函数地址的时候,就是回调调用
我的意思是回调函数不单单可以用于操作系统专用,也可以是普通程序。回调函数的类型可以是__stdcall,也可以是__cdecl,但操作系统API里面的回调函数的类型必须是__stdcall.
callback是过程化的,
outgoing interface 对象化的,他们的目的都是给程序提供扩展功能。他们的特点是定义和实现分离。