VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 441|回复: 8

[交流] 关于指针不明白的地方,求教大牛。 万分感谢

[复制链接]
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2019-11-16 11:42:19 | 显示全部楼层 |阅读模式
如题
if (g_IocPSever->Initialize(NotifyPort, this, nMaxConnecTions, nPort))
这是调用部分


这是被调用部分
void CALLBACK CMainFrame::NotifyPort(LPVOID lparam, ClientContext *pClientContext, UINT nCode)
{
                CMainFrame*pFrame = (CMainFrame*)lparam;
唯一不明白的是该NotifyPort  的参数1lparam代表的是当前NotifyPort回调函数的指针 ,假如是该指针那么是不是该指针指向的是该回调函数?   假如不是指针那么该参数是什么



static void CALLBACK NotifyPort(LPVOID lparam, ClientContext *pClientContext, UINT nCode);//这是申明部分




上一篇:自己写的小的加密程序,新手学习,大牛不用看了
下一篇:关于Gh0st清理事件查看器
87_avatar_middle
最佳答案
11 
在线会员 发表于 2019-11-16 13:20:10 | 显示全部楼层
本帖最后由 cqzj70 于 2019-11-16 13:26 编辑

你这个是远控gh0st源码里的,你应该看这个函数内部实现,就知道这个指针是怎么回事了,在实际调用中用的是this指针,也就是当前类的指针,也就是CMainFrm的指针
关于指针不明白的地方,求教大牛。  万分感谢
01_avatar_middle
最佳答案
39 
online_admins 发表于 2019-11-16 12:37:08 | 显示全部楼层
调用 Initialize 初始化时候第2个参数你传递的是 this,这个 this 指的是谁?CMainFrame 的指针吗?
那么这时候,NotifyPort 回调函数被调用的时候 第 1个参数 lparam 就是初始化传递的CMainFrame 的指针
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2019-11-16 14:07:55 | 显示全部楼层
cqzj70 发表于 2019-11-16 13:20
你这个是远控gh0st源码里的,你应该看这个函数内部实现,就知道这个指针是怎么回事了,在实际调用中用的是th ...

是的最近在学习这个源码,然后遇到这块有点 似懂非懂的感觉  , 谢谢您指点
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2019-11-16 14:11:39 | 显示全部楼层
cqzj70 发表于 2019-11-16 13:20
你这个是远控gh0st源码里的,你应该看这个函数内部实现,就知道这个指针是怎么回事了,在实际调用中用的是th ...


CMainFrame*pFrame = (CMainFrame*)lparam;//治理将其转为主框架类指针,
//为啥不直接定义一个CMainFrame*pFrame 指针,直接调用下面的语句,而是将回调函数的lparam转换呢
//老哥 新手   不太理解还望指点
pFrame->ProcessReceiveComplete(pClientContext);
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2019-11-16 14:14:09 | 显示全部楼层
admin 发表于 2019-11-16 12:37
调用 Initialize 初始化时候第2个参数你传递的是 this,这个 this 指的是谁?CMainFrame 的指针吗?
那么 ...

老哥  我是不是可以这么理解
NotifyPort(LPVOID lparam,
该函数的第一个参数其实就是if (g_IocPSever->Initialize(NotifyPort, this, nMaxConnecTions, nPort))
//这个函数里面的 this指针指向当前的指针;
然后回调函数中的lparam其实就是保存着Initialize(NotifyPort, this, nMaxConnecTions, nPort))

里面的这个this指针呢?  还望老哥指点一二,新手第一次学习 有些东西还是不太明白   十分感谢
75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2019-11-16 14:16:14 | 显示全部楼层
wl1383838438 发表于 2019-11-16 14:14
老哥  我是不是可以这么理解
NotifyPort(LPVOID lparam,
该函数的第一个参数其实就是if (g_IocPSever-> ...

typedef void (CALLBACK* NOTIFYPROC)(LPVOID, ClientContext*, UINT nCode);该函数内部lpvoid指向的也是一个指针
87_avatar_middle
最佳答案
11 
在线会员 发表于 2019-11-16 15:36:17 | 显示全部楼层
本帖最后由 cqzj70 于 2019-11-16 15:41 编辑
wl1383838438 发表于 2019-11-16 14:11
CMainFrame*pFrame = (CMainFrame*)lparam;//治理将其转为主框架类指针,
//为啥不直接定义一个CMain ...


回调函数内部直接定义和外面传进来的对象实列都不是相同的一个了。虽然类是同一个,可以这样理解家是同一个家,如果这家人能生,可以有N多个子女
CMainFrame*pFrame=this;
CMainFrame*pFrame=new CMainFrame;
这两个pFrame里面还装的还是相同的实列对象吗!今后你还会学到设计模式里的单例模式!

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 很给力!

查看全部评分

75_avatar_middle
最佳答案
18 
ico_lz  楼主| 发表于 2019-11-16 16:03:07 | 显示全部楼层
cqzj70 发表于 2019-11-16 15:36
回调函数内部直接定义和外面传进来的对象实列都不是相同的一个了。虽然类是同一个,可以这样理解家是同 ...

这下懂了 老哥   基本明白了   谢谢您
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-10-30 00:45

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表