导航
  • 主页
  • VC综合技术
  • MFC新技术
  • 互联网技术
  • .NET 技术
  • VC/MFC界面
  • VC/MFC 进程
  • VC/MFC 数据库
  • VC++技术资源

MFC消息映射中:AFX_MSGMAP* (PASCAL* pfnGetBaseMap)()是什么类型?

cy010510630 2010-07-01 03:20:39
struct AFX_MSGMAP
{
#ifdef _AFXDLL
const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
#else
const AFX_MSGMAP* pBaseMap;
#endif
const AFX_MSGMAP_ENTRY* lpEntries;
};

请问,红色部分定义的到底是个什么东西?
看来像个函数指针。。。。。
请教了
...全文
97 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy010510630 2010-07-15
谢谢解答,我再理解理解
回复
用小括号括起来表示强制转换,所以不能像你那样写
回复
cy010510630 2010-07-02
是不是这样就翻译为:调用函数,而不是获得函数指针了?
谢谢各位解答。
回复
cy010510630 2010-07-02
还有一个不明白的地方,如果强制转换函数指针的话,第一次我也许会写成这样:
const (AFX_MSGMAP*) (PASCAL* pfnGetBaseMap());

所以我想知道,为什么红色括号不放在紧跟函数名之后?
回复
[Quote=引用楼主 cy010510630 的回复:]
struct AFX_MSGMAP
{
#ifdef _AFXDLL
const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)();
#else
const AFX_MSGMAP* pBaseMap;
#endif
const AFX_MSGMAP_ENTRY* lpEntries;
};

请问,红色部分定义的到底是个什么东西?
看来像个函数指针。……
[/Quote]
PASCAL* pfnGetBaseMap表示获得基类消息映射函数的地址的PASCAL类型的指针
AFX_MSGMAP*表示再将刚才的指针转换成消息映射类型的指针
const表示将刚才的指针再添加一个常量修饰符
回复
wygss_18 2010-07-01
就是函数指针,指向DECLARE_MESSAGE_MAP宏的GetMessageMap()函数

BEGIN_MESSAGE_MAP宏展开时GetMessageMap()内容为
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \

编译后在exe映像的rdata节形成如下结构
.rdata:005D7020 CYourApp__messageMap dd offset CWinApp__messageMap
.rdata:005D7024 dd offset CYourApp___messageEntries
.rdata:005D7028 CYourApp___messageEntries dd WM_COMMAND
.rdata:005D702C dd 0
.rdata:005D7030 dd ID_APP_ABOUT
.rdata:005D7034 dd ID_APP_ABOUT
.rdata:005D7038 dd AfxSig_vv
.rdata:005D703C dd offset CYourApp__OnAppAbout
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……