typedef void (CALLBACK * LINECALLBACK)()是什么意思?

csoapy 2005-03-20 09:31:19
这是tapi.h里的定义

typedef void (CALLBACK * LINECALLBACK)(
DWORD hDevice,
DWORD dwMessage,
DWORD dwInstance,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
);

谢谢!!
...全文
700 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
csoapy 2005-03-24
  • 打赏
  • 举报
回复
cout<< ? 哪不是重载<<吗?

俺只是想要个使用这种 typedef 定义的例子,肯求高手出招。


还有那个(CALLBACK * LINECALLBACK) 中的 *是什么意思?

返回一个指针吗?
jt638250 2005-03-24
  • 打赏
  • 举报
回复
对于回调函数这个东西我不太懂,谁能举个例子解释一下吗? 看程序的结构好像是用 typedef 声明了一种新的函数指针类型,就是不太懂 (CALLBACK * LINECALLBACK) 这部分内容的含义。
simon78 2005-03-23
  • 打赏
  • 举报
回复
关注ing
galanz 2005-03-23
  • 打赏
  • 举报
回复
马甲加把劲,给个标准
yuchengliu 2005-03-23
  • 打赏
  • 举报
回复
typedef void (CALLBACK * LINECALLBACK)(
DWORD hDevice,
DWORD dwMessage,
DWORD dwInstance,
DWORD dwParam1,
DWORD dwParam2,
DWORD dwParam3
);

LINECALLBACK为一个返回值为void类型 参数入栈方式为CALLBACK 参数为。。。。。。。的指针
我这样认为。。如有不正确,请指正一下
oyljerry 2005-03-23
  • 打赏
  • 举报
回复
函数体中实现就可以了
cout<<
csoapy 2005-03-23
  • 打赏
  • 举报
回复
谁举个例子?
我先给出这样的定义:
typedef void (CALLBACK * LINECALLBACK)( int hDevice );

要求在屏幕上输出形参 hDevice 的值。
visual4825 2005-03-22
  • 打赏
  • 举报
回复
收藏
bluedodo 2005-03-21
  • 打赏
  • 举报
回复
很详细了
csoapy 2005-03-21
  • 打赏
  • 举报
回复
CALLBACK 是个类型名吗?
参数传递方式而已。如:
void fun(int p1,int p2)

CALLBACK 也就是pascal 方式时被编译器翻译成:

push p1
push p2
call fun

而 c/c++ 的参数传递方式就被翻译成:

push p2
push p1
call fun

参数传递方式,入栈顺序不同而已。

怎会是 参数类型为CALLBACK


llmsn 2005-03-21
  • 打赏
  • 举报
回复
这个typedef是用来产生类型别名的一个关键字,上面那个函数定义就是用来产生一个参数类型为CALLBACK * LINECALLBACK的函数别名,但上面的函数好像没有别名.
csoapy 2005-03-21
  • 打赏
  • 举报
回复
callback 是告诉编译器发生函数调用时“本函数”使用的参数传递顺序。
而不是一种类型啊?

还是不明白。。。。。。


windef.h里面是这样做的:

#define pascal __stdcall
#define CALLBACK __stdcall
#define PASCAL __stdcall
#define CALLBACK PASCAL

就是发生函数调用时传递参数的顺序(入栈次序)与c/c++相反。

还有,windows 是用c写的,为何要用混用两种函数参数传递方式呢?以区别函数的回调或者不回调?




nodummy 2005-03-20
  • 打赏
  • 举报
回复
没有定义函数指针,typedef不导致空间的分配,也不产生新的类型,楼上搞清楚……
e5022 2005-03-20
  • 打赏
  • 举报
回复 1
定义了一个函数指针,这个函数的返回类型和参数表已经在下面给出了,声明一个这样类型的变量,然后把一个参数表和返回值表完全相同的函数的函数名(不含括号,因为函数名就是函数的入口地址)赋给这个变量,以后使用此变量后加(参数)就可以调用这个函数了。

具体应用就是如上面所定义的那样,用于CALLBACK回调。比如一个数据结构的遍历程序,尽管我们有了非常先进的搜索算法,但是却无法定义遍历每个结点后需要作什么,这时可以把函数地址作为实参赋给遍历函数。遍历函数每取得一个结点就调用这个函数。这样设计的程序通用性非常高,可以到处使用却无需改代码。缺点就是你问问题的原因,不易理解
nodummy 2005-03-20
  • 打赏
  • 举报
回复
CALLBACK应该是__stdcall的宏定义

其实这个是一个类型定义(并不产生新的类型,只是一个类型别名)

这个是一个函数指针类型的别名,这种函数指针是回调函数(使用了__stdcall调用协议),并且各个参数的类型是DWORD的。

另外,后面的参数名字没有意义……

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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