免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: lylzp
打印 上一主题 下一主题

[函数] 函数指针变量的类型转换 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-01-08 16:21 |只看该作者

函数指针变量的类型转换

[quote]原帖由 "stonemason"]开开玩笑,MFC的做法是把函数指针声明为一个union,管他什么类型的函数指针都可以用。[/quote 发表:


我去找了一下,并没找到。

stonemason兄,能告诉我是那个文件吗?我看ON_COMMAND的定义是这样的:


  1. #ifndef AFX_MSG_CALL
  2. #define AFX_MSG_CALL
  3. #endif

  4. typedef void (AFX_MSG_CALL CCmdTarget::*AFX_PMSG)(void);

  5. #define ON_COMMAND(id, memberFxn) \
  6.         { WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)&memberFxn },

复制代码

论坛徽章:
0
12 [报告]
发表于 2004-01-08 17:23 |只看该作者

函数指针变量的类型转换

#define ON_COMMAND(id, memberFxn) \
   { WM_COMMAND, CN_COMMAND, (WORD)id, (WORD)id, AfxSig_vv, (AFX_PMSG)&memberFxn },

记不大清楚,好像这样:
union MessageMapFunctions mmf;
这个mmf就包含函数指针,可以把各个消息处理函数的地址赋给它。
这个union里面好像是个struct,还有其他东东。
把ALTER_FUN放到union中去,就这个意思。
MFC太庞杂,我只是马马虎虎看了一点。

论坛徽章:
0
13 [报告]
发表于 2004-01-08 17:39 |只看该作者

函数指针变量的类型转换

原帖由 "lylzp" 发表:

希望能给这方面不熟的大侠一个启发。


你的 cdecl 把人搞糊涂了, 至于别的转换,我觉得与一般的 cast 没有多大区别.

论坛徽章:
0
14 [报告]
发表于 2004-01-08 18:16 |只看该作者

函数指针变量的类型转换

原帖由 "win_hate" 发表:


你的 cdecl 把人搞糊涂了, 至于别的转换,我觉得与一般的 cast 没有多大区别.


那倒也是!!!

我是不应该把它加上的。

论坛徽章:
0
15 [报告]
发表于 2015-01-05 10:18 |只看该作者
看了C陷阱与缺陷中的介绍:
函数指针类型转换适合没有函数名而只知道地址时可以通过类型转换来调用函数:如模拟开机启动的情形地址0可以如下调用:
  (*(void(*)())0)();
其中(void(*)())是类型转换表达式,而后(* + 类型转换表达式 + 0)();就是执行的方式调用该例程。

可是不太明白的是,LZ定义的pf2是指向有传入参数类型的函数指针,而block只是一个空类型的地址。把block的地址经过类型转换后赋值给pf2能够执行该函数吗,因为一个有参数,一个没有参数。(我自己也没有试过)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP