社区
新手乐园
帖子详情
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
);
谢谢!!
...全文
767
15
打赏
收藏
typedef void (CALLBACK * LINECALLBACK)()是什么意思?
这是tapi.h里的定义 typedef void (CALLBACK * LINECALLBACK)( DWORD hDevice, DWORD dwMessage, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3 ); 谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
csoapy
2005-03-24
打赏
举报
回复
cout<< ? 哪不是重载<<吗?
俺只是想要个使用这种 typedef 定义的例子,肯求高手出招。
还有那个(CALLBACK * LINECALLBACK) 中的 *是什么意思?
返回一个指针吗?
水晶绿鱼
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的。
另外,后面的参数名字没有意义……
我对单片机中
typedef
void
(*Button_
CallBack
)(
void
*) 的理解
正常来说
typedef
unsigned int unint32
typedef
struct { *** }structName; 想必大家都不会陌生,但是
typedef
void
(*Button_
CallBack
)(
void
*) 就会很奇怪。 难道是要把
void
等价于 (Button_
CallBack
)(
void
)吗? 实际上你可以理解为一个函数模板,按照这个模板出来的函数输入变量是
void
*指针,输出变量是
void
。 Button_
CallBack
my
CallBack
等价于声明了
C/C++
typedef
的理解
typedef
void
(*pfunc)(int);你不会再错了
C/C++
typedef
的理解
typedef
void
(*pfunc)(int); 初学时:
typedef
int XXX,给类型int取一个别名xxx,嗯我懂了,EZ。 一段时间过后:
typedef
void
(*pfunc)(int); ???将
void
取别名(*pfunc)(int)?不对啊,网上搜一搜,原来是函数指针啊,理解不了,先记住吧。 一段时间后:
typedef
int a[10]; ???又记? 关于
typedef
的解释 个人见解:
typedef
的作用是将 变量名 (声明变量这
C语言中
typedef
void
(*F)(类型)解读
C语言中
typedef
void
(*F)(类型)解读
C语言之
typedef
void
(*T) (
void
*)
typedef
void
(*T) (
void
*);定义了一个指向函数的指针T,其返回值
void
类型,参数也是后面的(
void
*)接下来我们就可以直接使用 T 来定义这种指针变量,比如:T fn1; //等价于
void
fn1 (
void
*);使用:
void
func(
void
*); //声明函数T fn1; //定义变量fn1=func; //赋值(*fn1)(); //执行...
typedef
void
(*p)(
void
)说明
#include "stdio.h"
void
print(
void
) { printf("print\n"); }
void
PRINT(
void
) { printf("PRINT\n"); } //定义了一个别名为p0的函数指针
typedef
void
(*p0)(
void
); //使用时要定义一个变量p0 p; /*******************************************************************/ int (*p1)(int c,in
新手乐园
33,321
社区成员
41,774
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章