Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

回调函数是什么?

2 views
Skip to first unread message

tyh_123

unread,
Nov 16, 2009, 9:45:25 PM11/16/09
to
�ϰ�˵����ϵͳ���õ��ǻص�����
���Ͻ��Ѻ���ĵ�ַ��Ϊ����ݵĽ����ص�����

����һ��˵������ϢҲ��һ�ֻص�����


���˺ܾõ���Ϣ���Զ�����Ϣ��

�Һ��Ժ�ص�������ɶ����ô�á�������


Cen

unread,
Nov 17, 2009, 3:49:08 AM11/17/09
to
���ϰ�˵�������. �ص�����(callback)֮���Խлص�, ������Ϊһ����û������ǵ���ϵͳ�ķ�����(API)��ϵͳ����, ��ص�������������û�����, ��ϵͳ����������û�����(��Ȼ�ص�������Ҳ���������API), �����ر��Ϊcallback.

�Ѻ���ĵ�ַ��Ϊ�����ֻ��callback��һ������, ��ϵͳ������, ���ܵø���ϵͳ��ĺ����ַ���Ķ�. ��Ϣ, WM_*�dz���, MSG����ݽṹ, ������Ϣ�Ĵ��ں���WindowProc���ǻص�����. WindowProcҪ��Windowsϵͳ�ķ�����DispatchMessage������������Ϣ.

WindowProc, DialogProc, TimerProc, EnumWindowsProc, EnumChildProc, EnumDesktopProc, EnumCodePagesProc, HOOKPROC(CallWndProc,
CallWndRetProc, CBTProc, DebugProc, ForegroundIdleProc, GetMsgProc, JournalPlaybackProc, JournalRecordProc, KeyboardProc,
LowLevelKeyboardProc, MouseProc, LowLevelMouseProc, MessageProc, ShellProc,
SysMsgProc)����callback.

Moses

unread,
Nov 17, 2009, 4:17:52 AM11/17/09
to
消息也算是广义的回调吧...

"tyh_123" <2...@2.com> wrote in message news:hdt2v1$ks9$1...@www.shinco.com...
> 老板说:由系统调用的是回调函数
> 网上结果:把函数的地址作为参数传递的叫做回调函数
>
> 还有一种说法:消息也是一种回调函数
>
>
> 用了很久的消息和自定义消息。
>
> 我很迷糊回调函数是啥,怎么用。。。。
>
>

tyh_123

unread,
Nov 17, 2009, 4:48:34 AM11/17/09
to
how to use?
�����ǰѺ����ַ����ȥ��

"Cen" <C...@rixi.an> д����Ϣ news:1...@rixi.an...

Cen

unread,
Nov 17, 2009, 6:48:40 AM11/17/09
to
��ô��? ��SDK�ĵ�˵������. WindowProc�㲻�������˺ܾ���.

�������ַֻ��callback�Ĵ�Ҫ����, ��Ҫ������callback�Ĺ���Ҫ��ϵͳ�Դ�callback��Ҫ����д.

����WindowProc�ĵ�ַ��RegisterClassEx/SetClassLongPtr/SetWindowLongPtr���ݸ�ϵͳ, CallWndProc��SetWindowsHookEx���ݸ�ϵͳ, ����С��,
�ؼ���WindowProc/CallWndProc��ôдҪ��SDK�ĵ�˵����д.

tyh_123

unread,
Nov 17, 2009, 8:30:40 AM11/17/09
to
WindowProc��û�ù���ù���Ҳ��֪��������-_-!

������Թ��mfc����֮�󣬾���Ҳûȥ��������鼮�ˡ�(ȷʵmfc���鼮̫���Ѻ���)

��ֻ�Ǽ򵥵�ѧ�������Զ�����Ϣ�͵��ö���......

���仰˵���һ������⡣Ҳ���Ҫ������......

˵ʵ��WindowProc�е���죬�ѵ���һ����Ϣѭ���ĺ���


"Cen" <C...@rixi.an> д����Ϣ news:1...@rixi.an...

tyh_123

unread,
Nov 17, 2009, 8:33:31 AM11/17/09
to
����,c++ primer��Ҳû���꣬����1/3�ɣ������ǿ���400��ҳ(pdf)��

����¿��ԣ��¸����ļ���16�ţ��ͱ�ҵ���Ŀ��⣨˵�����Ǻ����˵ģ�����ѧ�Ĵ���12��ע���DZ��˺��ƺͺ�����...����

����Ҫ��1�·ݲŻ�ȥ�����ˡ�

"Cen" <C...@rixi.an> д����Ϣ news:1...@rixi.an...

tyh_123

unread,
Nov 17, 2009, 8:44:11 AM11/17/09
to
�ٲ����£����ڱ����������̬��ԭ��

��֪Ϊɶ���е��ų����е�ϲ��mfc���ų�����Ϊmfc���Ų��Ѻã�ûqt��ô�Ѻá�����vc/mfc�飬���dz�ƪ�ϻ������ǿ����ۡ�

ϲ������Ϊ��ide��qt���㡣����ӽ�����˵��qt��΢���Щ��

��win�£�text����������Щ�Ҷ����ᡣ֮ǰ��Ϊ��ѧϰ���ڣ����ǻ�㣬�����ڶ�����ˡ�

�����ڲ�����ֻ�Ǵ����и����������;��ȥ��qt��qt��mfc_ui�ƺ���ЩСС����𣩣�����������ڣ��Ҹ�ûѧmfc����Ǻܴ�

����qt��Ӱ����Ե���һЩ������Ҳ������

mfc,qt,C++������Ϥ�̶����� �����ߣ� C++,qt,mfc ���ͣ���

ȥ����̵��ڰ�����ˡ�����^_^�������Զ��̱߳Ƚϸ���Ȥ�����Զ��߳�Ӧ����΢��ϤЩ.


"Cen" <C...@rixi.an> д����Ϣ news:1...@rixi.an...

Cen

unread,
Nov 18, 2009, 6:38:48 AM11/18/09
to
callback��ӡ��������һ������ϵͳ���п�����, ò�ƻ���"Don't call me, I will call you"֮��, ���ڼDz������ı���. callback��C/C++����(����C���ԺͲ���ϵͳ�Ĺ�ϵ)�����ϵ�ƺ�����, ���crt��qsort��Щ�⺯���õ���compare�����callback����.

WindowProc��ָWNDPROC���͵Ĵ��ں���(���?����Ϣ�ĺ���), ��˵���˺ܾõ���Ϣ, ����Ϊ��һ����WindowProc������, ��������һֱ��MFC, MFC��WindowProc��װ�ø�����, �ѹ��㲻֪��.

�̵߳���ں���ThreadProcҲ��callback����, ��CreateThread��MFC��AfxBeginThread��ThreadProc��ַ���ݸ�ϵͳ, ϵͳ����kernel32!BaseThreadStart�ص�ThreadProc��ʼ�������߳�.

DllMain, WinMain, main, Ҳ��callback����, VC�������ϵ��⼸������, �Զ�����Ϊģ����ں���(�������ָ���, Ҫ��#pragma comment(linker,
"/entry:xxx")��/entry:xxx����ѡ��ָ��), ϵͳ����ģ��ʱ�Զ��ص��⼸����ں���(���Ӧ��crt��ں���).

tyh_123

unread,
Nov 18, 2009, 6:56:04 AM11/18/09
to
1,��˵���Ǿ仰,��windows program������

2��������ȥ��ϸ���������������

����Խ��Խ���ˣ������ֿ�ʼ����Ӧ����

"Cen" <C...@rixi.an> д����Ϣ news:1...@rixi.an...

����ֽҳ

unread,
Nov 19, 2009, 12:14:54 PM11/19/09
to
��ѻص�������ô���ӡ�

���ǡ�����ָ�롱 �������������һ����㹻�ˡ�

��һ���ǵ���Call Back��˭Call�����ԡ�����ֻ����Call back�õĶ�һЩ���ˡ�

--
�������Ƚ���google��Ȼ���ٽ���������ѡ�����

http://fzhzhy.is-programmer.com/

acc

unread,
Nov 22, 2009, 1:48:47 AM11/22/09
to
char ��ġ��DZ��顱

"Cen" <C...@rixi.an> д����Ϣ����:1...@rixi.an...

acc

unread,
Nov 22, 2009, 2:26:25 AM11/22/09
to
�ص��������˼�ǣ�һ��ϵͳ�Ѿ��涨���˺���ԭ�ͣ������Լ�����������������������⹦�ܡ��������Լ���Ƶĺ���ԭ�ͣ��DZ�����ƺõ�ԭ�ͣ�����ϵͳҪ�����������Windows �Ĵ��ڹ���ǻص�����Windows ֪����
��Ҫ�����ĸ�����wndclass.lpfnwndproc���������ʵ���ʱ�����ʵ��IJ������������������������㶨�塣һЩ����������� Winamp �ɣ��IJ�����ǻص�����

��Ȼ�Ǻ���ԭ�ͣ����е���Լ��������Լ��Ҳ�ǹ涨�õ�ԭ�͵�һ���֣�Windows ����ʹ��
__stdcall ��Ϊ�ص�����ĵ���Լ�����м����� WINAPI��APIENTRY��CALLBACK���������
__stdcall��

���԰���Ĺ��캯����ǻص�����û����ȷ�涨���֣����Ǻ��������������ʽ�涨�����֣����ص������е�������˼��

��Ϣ��ô�ǻص�������Ϣ��msg.message)��Ϊ�������ݸ�ص�����

"tyh_123" <2...@2.com> д����Ϣ����:hdt2v1$ks9$1...@www.shinco.com...

acc

unread,
Nov 22, 2009, 2:30:34 AM11/22/09
to
���ˡ��Ǹ� int main() �� WinMain() �������Ļص�����ɼ��㾭��д�ص�����


"acc" <jo...@sina.com> д����Ϣ����:heap2c$gip$1...@www.shinco.com...


tyh_123

unread,
Nov 22, 2009, 2:54:08 AM11/22/09
to
Ŷ������������ܶ��ˡ�

ֻ��ϧ��how to use���Dz��ᡣ

��˼����˵��ô��ϵͳ�������ҡ�

��Щ��main,���죬���������⡣


"acc" <jo...@sina.com> д����Ϣ news:heapab$h0q$1...@www.shinco.com...

acc

unread,
Nov 22, 2009, 6:08:13 AM11/22/09
to
�е� api ���������һ������ָ�룬��һ�㶼������һ���ص������������� api ��ԭ�ͣ�Ȼ�����Ų������һ�¡����һ���� EnumWindows������ msdn �и����ӣ�������˵�IJ�࣬������
˵��Ҫȫ��

EnumWindows Function

http://msdn.microsoft.com/en-us/library/ms633497(VS.85).aspx

��Σ�ʵ�ֻص�����

http://msdn.microsoft.com/zh-cn/library/843s5s5x.aspx

����ǩ����һ��������������ꡣ���滹������������£�������ҿ�Ӣ�ĵģ��������IJ��á�


"tyh_123" <2...@2.com> д����Ϣ����:heaqn7$k4b$1...@www.shinco.com...

acc

unread,
Nov 22, 2009, 6:20:16 AM11/22/09
to
���� Cen ˵������Ҫ���㿴�� qsort ��Դ��

"tyh_123" <2...@2.com> д����Ϣ����:heaqn7$k4b$1...@www.shinco.com...

Moses

unread,
Nov 22, 2009, 6:50:07 AM11/22/09
to
我的理解是消息也是系统发给程序的, 程序得到消息后作出动作, 也就是系统对程序进行了回调....

--
楼上 acc 说的 "Re: 回调函数是什么?" 在某一分钟的第 33 秒被 Moses 所回复;
文件夹 ID 为 58;
原帖 23 行共 1758 字节.

a> 回调函数的意思是,一个系统已经规定好了函数原型,由你自己来定义这个函数,可以完成任意功能。不是你自己设计的函数原型,是别人设计好的原型,将来系统
a> 要调用这个函数。Windows 的窗口过程是回调函数,Windows 知道将
a> 来要调用哪个函数(wndclass.lpfnwndproc),它在适当的时候用适当的参数调用这个函数,而函数体必须由你定义。一些软件(好像是
a> Winamp 吧)的插件就是回调函数。

a> 既然是函数原型,就有调用约定,调用约定也是规定好的原型的一部分,Windows 里面使用
a> __stdcall 作为回调函数的调用约定,有几个宏 WINAPI、APIENTRY、CALLBACK,都是这个
a> __stdcall。

a> 可以把类的构造函数看成是回调函数(没有明确规定名字,但是函数名就是类名,隐式规定了名字)。回调函数有点插件的意思。

a> 消息怎么是回调函数?消息(msg.message)作为函数参数传递给回调函数。

a> "tyh_123" <2...@2.com> 写入消息新闻:hdt2v1$ks9$1...@www.shinco.com...

acc

unread,
Nov 22, 2009, 7:17:52 AM11/22/09
to
Ҳ�ǡ���Ϣ����ص������ˣ���Ϊ�ص�����IJ���

"Moses" <moses...@gmail.com> д����Ϣ����:heb8hr$htj$1...@www.shinco.com...
�ҵ��������ϢҲ��ϵͳ��������, ����õ���Ϣ����������, Ҳ����ϵͳ�Գ�������˻ص�....

tyh_123

unread,
Nov 22, 2009, 7:24:57 AM11/22/09
to
�ⲻ�����ã�Խ������Խ������

���ĵ��Ǹ��õ�һ����������������ϰ�˵�ģ���DllImport����

��������û���ö�������������ٽ�.net����Щ���Խ��Խ��Ϳ��

Ӣ����������С�ֻ��ϧ���ۺ�Ϳ�ˡ����ٿ����ȣ�ʵ�ڲ����������ʡ�

"acc" <jo...@sina.com> д����Ϣ news:heb62i$bsg$1...@www.shinco.com...

tyh_123

unread,
Nov 22, 2009, 7:25:13 AM11/22/09
to
���˵�ˣ�3Q

"acc" <jo...@sina.com> д����Ϣ news:heb62i$bsg$1...@www.shinco.com...

Cen

unread,
Nov 22, 2009, 8:28:32 AM11/22/09
to
Moses˵���ǻص�"����". ��������˵���ǻص�"����".

"��Ϣ�����Ļص�"����˼����Ϣ��ϵͳ��һ�ֻص�"����", ��Ϣ�Ļص�"����"����ϵͳ����Ϣ��Ϊ�ص�"����"�IJ���, Ȼ��ϵͳ���ûص�"����", ϵͳ���������Ϣ"����"����.

"acc" <jo...@sina.com> wrote:
> Ҳ�ǡ���Ϣ����ص������ˣ���Ϊ�ص�����IJ���
>

> "Moses" <moses...@gmail.com> wrote:
>> �ҵ��������ϢҲ��ϵͳ��������, ����õ���Ϣ����������, Ҳ����ϵͳ�Գ�������˻ص�....
>>

>> "acc" <jo...@sina.com> wrote:
>>> ��Ϣ��ô�ǻص�������Ϣ��msg.message)��Ϊ�������ݸ�ص�����

"Cen" <C...@rixi.an> wrote:
> ��Ϣ, WM_*�dz���, MSG����ݽṹ, ������Ϣ�Ĵ��ں���WindowProc���ǻص�����. WindowProcҪ��Windowsϵͳ�ķ�����DispatchMessage������������Ϣ.

"Moses" <moses...@gmail.com> wrote:
> ��ϢҲ���ǹ���Ļص���...

Cen

unread,
Nov 22, 2009, 8:36:22 AM11/22/09
to
�����Ľ�? ������callbackû�ҵ�

"acc" <jo...@sina.com> wrote:
> char ��ġ��DZ��顱

Cen

unread,
Nov 22, 2009, 10:34:24 AM11/22/09
to
锟姐不锟斤拷锟矫癸拷::AfxBeginThread(PreProcess_Thread,&Thread_info);锟斤拷系统锟斤拷锟斤拷锟斤拷锟斤拷锟絇reProcess_Thread锟斤拷锟斤拷?

"tyh_123" <2...@2.com> wrote:
> 只锟斤拷惜锟斤拷how to use锟斤拷锟角诧拷锟结。
> 锟斤拷思锟斤拷锟斤拷说锟斤拷么锟斤拷系统锟斤拷锟斤拷锟斤拷锟揭★拷

"Cen" <C...@rixi.an> wrote:
> 锟竭程碉拷锟斤拷诤锟斤拷锟絋hreadProc也锟斤拷callback锟斤拷锟斤拷, 锟斤拷CreateThread锟斤拷MFC锟斤拷AfxBeginThread锟斤拷ThreadProc锟斤拷址锟斤拷锟捷革拷系统, 系统锟斤拷锟斤拷kernel32!BaseThreadStart锟截碉拷ThreadProc锟斤拷始锟斤拷锟斤拷锟斤拷锟竭筹拷.

tyh_123

unread,
Nov 22, 2009, 11:14:09 PM11/22/09
to
�ǵ�......^_^

"Cen" <C...@rixi.an> д����Ϣ news:1...@rixi.an...

> �㲻���ù�::AfxBeginThread(PreProcess_Thread,&Thread_info);��ϵͳ���������PreProcess_Thread����?

acc

unread,
Nov 23, 2009, 12:28:10 AM11/23/09
to
����������

The Windows Programming Hurdles

Don't Call Me, I'll Call You

"Cen" <C...@rixi.an> д����Ϣ����:1...@rixi.an...

acc

unread,
Nov 23, 2009, 12:31:01 AM11/23/09
to
��������һ������Ϊ Mouse ˵������Ϣ���ƣ���ʱû��ص����ƣ�����Ϣ����ʹ���˻ص����������Ϊ��Ϣ���ǻص���


"Cen" <C...@rixi.an> д����Ϣ����:1...@rixi.an...

acc

unread,
Nov 23, 2009, 1:03:28 AM11/23/09
to
����ɶ����ʵ������ô�ã���Ӧ���ʣ��ĸ��ص�������ô�á���Ϊ��Ȼ�ǻص������Ƕ����������ա����ȹ涨�õġ�

��Ҫ��֪����ôдһ��ʹ�ûص�����ij��򣬿����棺

pf();

�����ļ���ijһ��д���������䡣������仰Ӧ����ij�������ڣ������������ļ���Χֱ����һ��������ã��ļ���Χ���ú����и���ӵķ���������һ�����������͵����˸���Ĺ��캯��

���ԣ���ij������ĺ������ڣ������������䣬

pf();

����뷨�ǣ��� pf ִ�в�ͬ�Ĺ��ܡ���ô pf ��һ�������Ǹ������������Ӳ�����ˣ�ÿ��д�� pf()��������䡢����䣬����ȻҲ���䡣�������� pf �Ǹ�����ָ�룬
����δ֪�������ܲ����ۼٶ�����Ҫһ�� void �ͺ���

Ҫ���� pf �ɱ䣬�㲻���Լ����� pf ��ֵ��pf ��ֵ����ͨ��ij�ַ�����ȡ��һ��ʹ�ú���������ԣ���ĺ�����������

int f(void (*pf)())
{
// ...

pf();

// ...
return 0;
}

������͹涨��һ���ص������������⣬���������
void ��__cdecl*)()

pf ��һ������ָ�룬ָ������һ�� void ��__cdecl*)() ����

��Ҫ�����ûص��������������д��

int f(void (*pf)(int), int n)
{
// ...

pf(n);

// ...
return 0;
}

������涨��һ�� void (__cdecl*)(int) ���͵Ļص�����

��Ȼ��Ҳ���Բ���Ĭ�ϵĵ���Լ�������Լ��涨����Լ������������ʽд�µ���Լ����

int f(void (__stdcall *pf)(int), int n)
{
// ...

pf(n);

// ...
return 0;
}

void __stdcall g(int)
{
// ...
}

int main()
{
f(g, 1);
}

"tyh_123" <2...@2.com> д����Ϣ����:hebajn$mcm$1...@www.shinco.com...
> ���˵�ˣ�3Q


acc

unread,
Nov 23, 2009, 1:17:38 AM11/23/09
to
�ص������ dll û�б�Ȼ��ϵ������Է��� dll ���档���ĵ���ƪ�����е����Ӳ��ÿ��ˣ��������ǿ���������

"tyh_123" <2...@2.com> д����Ϣ����:hebaj0$mbd$1...@www.shinco.com...

tyh_123

unread,
Nov 23, 2009, 2:49:20 AM11/23/09
to
�һ�����Щ���Ժ��

�ҿ����Ľ����ǣ�

��ʵ�ϣ�������һ������ָ��ȥ����ij��δ֪�ĺ���

��֮���Խ����ص����Ǿ���ϵͳ����ȥ�����ַ��

������������ƺ���������͸����׵ö��ˡ�

����������ӣ��һ��ö࿴���顣�տ��Ի�����ͷ�Ρ�������


����� ^_^


"acc" <jo...@sina.com> д����Ϣ news:hed8iq$lul$1...@www.shinco.com...

Cen

unread,
Nov 23, 2009, 7:42:44 AM11/23/09
to
�ҵ���!
��֮ǰ�����������µ�һ��The WinMain function is given a type of WINAPI (as is every Windows function call defined in the header
files), and the WndProc function is given a type of CALLBACK. Both these identifiers are defined as __stdcall, which refers to a
special calling sequence for function calls that occur between Windows itself and your application.
�����µڶ���ûCALLBACK����, �ѹ��Ҳ���.
ӡ����callback��һ������ϵͳ�齲API��ʱ�����, ��û"Don't Call Me, I'll Call You". ��署�����, ȴֻ��WndProc, û��ȷ��callback.
�Ҿ�����仰����callback����, ���Լǵ�һ���ȥ��, ����֮ǰ����Լ�ǵ���仰"ò��"��callback����һ�����, ��û�Ϻ�Ϳ.

acc

unread,
Nov 23, 2009, 6:39:17 PM11/23/09
to
:D

"Cen" <C...@rixi.an> д����Ϣ����:1...@rixi.an...

acc

unread,
Nov 24, 2009, 11:31:36 PM11/24/09
to
�ص�������ǻ��£�Ҳ˵��������ص��������ʹ�ú���ָ�룻����ָ�벻��ר�����ڻص�����


"tyh_123" <2...@2.com> д����Ϣ����:hedeq9$7ss$1...@www.shinco.com...

Cen

unread,
Nov 25, 2009, 8:08:54 AM11/25/09
to
����ǰҲ���Ի�, ��������������call��, ��call CreateThreadʵ����Ҳ�DZ���Ϊʹ�ú���ָ��call dword ptr [MyApp!_imp__CreateThread], Ϊʲô�ú���ָ��call ThreadProcר�Ž�callback. ֱ�������DZ���Ӳ���ϵͳ�ĽǶ�����callback��������, callback����ǿ������ָ��, ����ǿ��back.

call CreateThread��ȻҲ���ú���ָ��, ��CreateThread��ϵͳ��API, �û�callϵͳ��API��ƽ��, Vc7�г�5708��API(win32SDK, ������DDK), ϵͳcall�û��ĺ�����ټ�һ��, Vc7�г�322��callback(win32SDK, ������DDK), �ʴ��ر��Ϊcallback.

����ϵͳcallback�û���ģʽ, �ƶ��֮, �����Ǻ����callback�û�, �����Dz���ϵͳA��ϵͳcallback����ϵͳB��ϵͳ, �������û�A��ģ��callback�û�B��ģ��.

Microsoft Visual Studio 7\Vc7\lib\win32api.csv
Element Type
104 3rd party DLL function
322 callback function
13 clipboard format
42 collection
46 command
48 command string
87 constant
190 control code
16 data extension
16 DDE transaction
11 device event
30 entry-point function
341 enumeration
3 filter function
5708 function
692 interface
710 macro
1258 message
321 notification message
248 object
2 operator
9 power management event
9 printer escape function
487 property
6 property set
230 provider function
7 registered message constant
28 resource format
40 simple data type
2357 structure
2 union
13383 �ܼ�

"acc" <jo...@sina.com> wrote:
> �ص�������ǻ��£�Ҳ˵��������ص��������ʹ�ú���ָ�룻����ָ�벻��ר�����ڻص�����
>

0 new messages