?@@@ MFC编程:请教DECLARE_MESSAGE_MAP()相关问题 @@@

zjxushengyong 2003-08-21 09:34:39
问题:DECLARE_MESSAGE_MAP()这个宏所替代的那段程序是什么样的,不知那位大哥能给出详细的代码,谢谢!
...全文
107 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohedou 2003-08-21
  • 打赏
  • 举报
回复
“请问 PASCAL 到底是什么一种类型?”

在Win32下,只有一种内存模型,那就是FLAT。 STDCALL 告诉编译器参数的传递约定。参数的传递约定是指参数传达时的顺序(从左到右或从右到左)和由谁恢复堆栈指针(调用者或被调用者)。在Win16下有两种约定:C 和 PASCAL。C 约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。

例如:为调用函数 foo ( int first_param, int second_param, int third_param ); 按C约定的汇编代码应该是这样的:

push [third_param]
push [second_param]
push [first_param]
call foo
add esp, 3 * 4 ;调用者自己恢复堆栈指针

PASCAL约定和C约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。Win16采用了PASCAL约定, 因为PASCAL约定产生的代码量要小。当不知道参数的个数时,C约定特别有用。如在函数wsprintf () 中, wsprintf预先并不知道要传递几个参数,所以它不知道如何恢复堆栈。STDCALL是C约定和PASCAL约定的混合体,它规定参数的传递是从右到左,恢复堆栈的工作交由被调用者。Win32只用STDCALL约定,但除了一个特例,即:wsprintf。

在jjhou.csdn.net里有全部的候老师的电子书。


xushengyong 2003-08-21
  • 打赏
  • 举报
回复
up...
xushengyong 2003-08-21
  • 打赏
  • 举报
回复
能不能对其中其他几个宏剖析一下呢:
1.AFX_MSGMAP_ENTRY
2.AFX_DATA
3.AFX_MSGMAP

另外在很多书本中我都看见如下形式的函数说明:
static const AFX_MSGMAP* PASCAL _GetBaseMessageMap();

请问 PASCAL 到底是什么一种类型?他是不是一个“宏”,如果是,那他代表什么呢?

由于鄙人半路出家,所以很多渊源的概念不是很懂,请高手们不吝赐教...谢谢!
zjxushengyong 2003-08-21
  • 打赏
  • 举报
回复
谢谢小虫虫...稍后给分...

这怎么还有怎么多的宏在里面呢?有没有全部用c++代码写的啊?我想了解以下具体实现...
houdy 2003-08-21
  • 打赏
  • 举报
回复
#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[];
protected:
static AFX_DATA const AFX_MSGMAP messageMap;
static const AFX_MSGMAP* PASCAL _GetBaseMessageMap();
virtual const AFX_MSGMAP* GetMessageMap() const;
#else
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[];
protected: \
static AFX_DATA const AFX_MSGMAP messageMap;
virtual const AFX_MSGMAP* GetMessageMap() const;
#endif
//摘自李永久<深入浅出MFC>
接分。。。
ForFar 2003-08-21
  • 打赏
  • 举报
回复
侯捷的《深入浅出MFC》有详细介绍
BSRONG 2003-08-21
  • 打赏
  • 举报
回复
你要看每个宏的原型,可以把光标放在这个宏上,按F12,第一次它要求编译,你只要确定,它就能
跳到宏的定义处,这也适用任何数据类型的定义的查看,包括类

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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