typedef void (GLUTCALLBACK *GLUTmouseCB) (int, int, int, int);

Roy_Smiling 2011-03-01 04:36:57
typedef void (GLUTCALLBACK *GLUTmouseCB) (int, int, int, int);
这句话什么意思,

我分析glutMouseFunc(GLUTCurrentCB mouseFunc)时 里面有句__glutCurrentWindow->mouse=mouseFunc;
然后分析__glutCurrentWindow结构里有句:GLUTmouseCB mouse;
然后分析到这个:typedef void (GLUTCALLBACK *GLUTmouseCB) (int, int, int, int);到头了。
请问这句话是什么意思
望高手解释一下,万分感谢!
...全文
107 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 roy_smiling 的回复:]

引用 17 楼 dizuo 的回复:
lz在看glut的源码?

嗯,你要 我给你一份!
[/Quote]
不用了,呵呵,谢谢~
Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
分析源码才知道,各种技术都是很简单的道理,事件驱动的里面的也有无限循环,也有
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
TranslateMessage( &msg );
DispatchMessage( &msg );
if ( msg.message == WM_QUIT ) {
exit( 0 );
}
}
do{
...
}
基本原理还是消息。
Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dizuo 的回复:]
lz在看glut的源码?
[/Quote]
嗯,你要 我给你一份!
ryfdizuo 2011-03-01
  • 打赏
  • 举报
回复
lz在看glut的源码?
Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 pengzhixi 的回复:]
肯定有一个类似注册的东西,将回调函数注册,这样就知道调用哪个函数了。
[/Quote]

那个注册的东西在哪呢,在程序代码里找不到啊,是编译器注册的么???
Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
定义了一个函数指针,并且也赋值给它了一个对应的事件处理函数,但是,系统怎么知道调用它呢???
Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
回调函数机制!比如:

void fun(void);

typedef void(*PF)(void);

PF g_pf;
void sys_fun()
{
if(...) g_pf();
}

g_pf = fun;


这个有点懂。但是sys_fun()不是系统函数么,那么sys_fun()里面的g_pf()怎么和外面的PF g_pf对应呢???
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复
肯定有一个类似注册的东西,将回调函数注册,这样就知道调用哪个函数了。
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复
额 ,你既然能理解消息机制为什么不能理解回调函数的使用?
Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pengzhixi 的回复:]
引用 9 楼 roy_smiling 的回复:
引用 4 楼 pengzhixi 的回复:
GLUTCALLBACK一般是调用约定


这个约定有什么作用,能不能简要的说一下?那个函数指针指向了一个事件处理函数,那OS怎么就知道了在事件发生时调用呢?


额 对windows的消息机制有了解吗?至于调用约定这个你可以google下“函数的调用约定”
[/Quote]
window 消息机制编程基本机制我还可以了解,也能够想得通原理。但这个回调函数,假如有事件发生了,消息循环取到消息了,它怎么知道执行哪个函数呢?不可能这种机制没有消息循环吧?
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 roy_smiling 的回复:]
引用 4 楼 pengzhixi 的回复:
GLUTCALLBACK一般是调用约定


这个约定有什么作用,能不能简要的说一下?那个函数指针指向了一个事件处理函数,那OS怎么就知道了在事件发生时调用呢?
[/Quote]

额 对windows的消息机制有了解吗?至于调用约定这个你可以google下“函数的调用约定”
Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pengzhixi 的回复:]
GLUTCALLBACK一般是调用约定
[/Quote]

这个约定有什么作用,能不能简要的说一下?那个函数指针指向了一个事件处理函数,那OS怎么就知道了在事件发生时调用呢?
太乙 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 roy_smiling 的回复:]

引用 2 楼 fengzhw 的回复:
你再把GLUTCALLBACK分析一下,应该是stdcall之类的说明,可以先不管他。

GLUTmouseCB就是一个函数指针类型,指向void f(int , int , int , int)这样的函数,用来做回调。

那这个函数指针类型赋值为一个用户定义的事件处理函数,那怎么操作系统就知道了在该事件发生时调用这个函数呢?
[/Quote]
回调函数机制!比如:

void fun(void);

typedef void(*PF)(void);

PF g_pf;
void sys_fun()
{
if(...) g_pf();
}

g_pf = fun;


Roy_Smiling 2011-03-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengzhw 的回复:]
你再把GLUTCALLBACK分析一下,应该是stdcall之类的说明,可以先不管他。

GLUTmouseCB就是一个函数指针类型,指向void f(int , int , int , int)这样的函数,用来做回调。
[/Quote]
那这个函数指针类型赋值为一个用户定义的事件处理函数,那怎么操作系统就知道了在该事件发生时调用这个函数呢?
赵4老师 2011-03-01
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
周药师 2011-03-01
  • 打赏
  • 举报
回复
函数指针
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复
GLUTCALLBACK一般是调用约定
bdmh 2011-03-01
  • 打赏
  • 举报
回复
指针函数,带四个参数的
fengzhw 2011-03-01
  • 打赏
  • 举报
回复
你再把GLUTCALLBACK分析一下,应该是stdcall之类的说明,可以先不管他。

GLUTmouseCB就是一个函数指针类型,指向void f(int , int , int , int)这样的函数,用来做回调。
pengzhixi 2011-03-01
  • 打赏
  • 举报
回复
定义一个函数指针类型。
这个函数指针类型指向返回类型为void,参数为int,int ,int这类函数

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧