为什么获取的指针为空?

psr09 2008-05-16 09:40:45


packet_handler被我定义成静态函数

void CNMCView::packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data){

//添加获取当前视图指针
CMainFrame *pMF=(CMainFrame *)AfxGetMainWnd();
CNMCView *pView=(CNMCView *)pMF->GetActiveView();//到这里为什么获取到的pview指针为空啊?
pView->m_ncmlistctrl.InsertItem(0,"192.168.1.1");

}
...全文
131 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
psr09 2008-05-17
  • 打赏
  • 举报
回复
7楼的
theApp.pMainWnd怎么使用啊?
谢谢了!
vocanicy 2008-05-17
  • 打赏
  • 举报
回复
packet_handler是回调函数,是运行在winpcap内部线程的上下文中,它不是MFC的CWinThread线程
AfxGetMainWnd是取的当前线程的主窗口
首先,这个线程应该没有窗口,并且非MFC的CWinThread线程,所以取不到指针。

可以用theApp.pMainWnd,但是记得在你的view的cpp或者h文件中,加入extern CWinApp theApp;
cnzdgs 2008-05-17
  • 打赏
  • 举报
回复
线程中不要用AfxGetMainWnd,可以直接用theApp.pMainWnd。
bitxinhai 2008-05-17
  • 打赏
  • 举报
回复
确定是在View的initupdate后再获取他的指针,
如果没有初始化,
当然获取到空指针了
psr09 2008-05-17
  • 打赏
  • 举报
回复
我点button的时候开个线程
通过线程调用其回调函数pcap_loop函数
cnzdgs 2008-05-17
  • 打赏
  • 举报
回复
这个函数是什么时候被调用的?
psr09 2008-05-17
  • 打赏
  • 举报
回复
是sdi的
cnzdgs 2008-05-16
  • 打赏
  • 举报
回复
是MDI吧?MDI要先GetActiveFrame。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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