小弟刚入C++大门,看代码看到一处宏定义,看不懂,向各位老师请教#define iDelegateOverride(pThat,tag,pThis,pFunc) *(void**)&(pThat)->_pfn##tag._pFunc=(void*)(pFunc);*(void**)&(pThat)->_pfn##tag._pThis=(void*)(pThis)基础一般,请详细介绍,让各位见笑了。
解决方案 »
- media player控件不能播放含有中文名的文件,英文的文件可以
- 无法获得媒体长度,请大家帮帮忙
- CPropertySheet属性页面如何释放内存?
- 创建消息
- 替代 VC++ ADO连数据库 #import "C:\Program Files\Common Files\System\ado\msado15.dll" ?
- 怎样判断鼠标点击的是树控件的哪一部分?
- 急救,高手快来,ODBC问题,解决后另开贴送上100分.
- 超级兔子自动刷新开始菜单的问题
- 系统到底对隐藏的窗口做了什么?
- 请问如何使用关于注册表和*.ini的API或MFC?
- 关于VC连接数据库的问题,求高手指教
- 如何生成用于编译 代理/占位dll的mk文件
iDelegateOverride( 111 , 222, 333, 444 )会变成*(void**)&(111)->_pfn222._444 = (void*)(444);
*(void**)&(111)->_pfn222._333=(void*)(333)
实际代码中是这么调用的
iDelegateOverride(&HotKey, OnHotKey, this, HotKey_OnHotKey);HotKey 是对像,OnHotKey是方法,this是拥有HotKey的对像,HotKey_OnHotKeythis.方法那么这句到底是什么意思呢
iDelegateOverride(&HotKey, OnHotKey, this, HotKey_OnHotKey); 变成*(void**)&(pThat)->_pfn##tag._pFunc=(void*)(pFunc); //这个;是宏里面的*(void**)&(pThat)->_pfn##tag._pThis=(void*)(pThis); //这个;不是宏里面的再变成
*(void**)&(&HotKey)->_pfn##tag._pFunc=(void*)(pFunc); //这个;是宏里面的*(void**)&(&HotKey)->_pfn##tag._pThis=(void*)(pThis); //这个;不是宏里面的再变成
*(void**)&(&HotKey)->_pfnOnHotKey._pFunc=(void*)(pFunc); //这个;是宏里面的*(void**)&(&HotKey)->_pfnOnHotKey._pThis=(void*)(pThis); //这个;不是宏里面的再变成
*(void**)&(&HotKey)->_pfnOnHotKey._pFunc=(void*)(HotKey_OnHotKey); //这个;是宏里面的*(void**)&(&HotKey)->_pfnOnHotKey._pThis=(void*)(this); //这个;不是宏里面的////////////////
基本上就是给this的HotKey这个变量设置了一个参数HotKey_OnHotKey。
基本上就是给this的HotKey这个变量设置了一个参数HotKey_OnHotKey。谢谢 jennyvenus 大侠iDelegateOverride(&HotKey, OnHotKey, this, HotKey_OnHotKey); 经过你的解释,从这里我看代码,猜的意思应该是
将 HotKey对像的 OnHotKey 方法的地址指定为 this.HotKey_OnHotKey方法
并把HotKey对像的 OnHotKey方法中的this(应该是HotKey)替换成 this(包含HotKey的对像)