CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

在Dll中使用连接点技术,DLL所在进程无法退出

楼主bareheadchl2004()2003-12-02 11:58:31 在 VC/MFC / ATL/ActiveX/COM 提问

类CFriendSession从CCmdTarget继承,  
  CFriendSession的构造器中调用:  
  BOOL   bRet   =   AfxConnectionAdvise(m_ISession,   IID_ISessionEvents,   m_session_sink,   FALSE,&m_session_cookie);    
   
  在CFriendSession的析构器中调用:  
  BOOL   bRet   =   AfxConnectionUnadvise(m_ISession,   IID_ISessionEvents,   m_session_sink,   FALSE,m_session_cookie);  
  断开连接。  
   
  当类CFriendSession直接被进程生成释放时,进程可正常退出。  
   
  当类CFriendSession放在某个Dll中,被进程生成释放时,进程不能退出。  
   
  问题点数:0、回复次数:8Top

1 楼luohualiushui(落花流水)回复于 2003-12-02 16:43:58 得分 0

 
  当类CFriendSession放在某个Dll中,被进程生成释放时,进程不能退出。  
  --------------------------------------------------------------------------  
  这句不明白,进程不能退出?  
  Top

2 楼wangweixing2000(星(inspiration(灵感)))回复于 2003-12-02 16:58:32 得分 0

GZTop

3 楼bareheadchl2004()回复于 2003-12-03 10:49:46 得分 0

进程不能退出是指当应用程序执行完ExitInstance后,不能转到  
  释放全局变量,即不是所有的线程退出了。  
  现在发现  
  是类CFriendSession的构造器中执行了以下语句导致的:  
  try  
  {  
  HRESULT   hr   =   m_ISession.CreateDispatch(CLSID_JabberSession,   e);  
  ASSERT(SUCCEEDED(hr));  
  }  
  catch(   COleDispatchException   *   e   )  
  {  
  e->Delete();  
  }  
   
  是不是与m_ISession的释放不干净有关?  
  谢谢先!Top

4 楼luohualiushui(落花流水)回复于 2003-12-03 11:16:32 得分 0

又可能啊  
  在析构函数中释放m_Isession没有?Top

5 楼xiaohedou(小河豆(充电中.18%.))回复于 2003-12-03 11:18:37 得分 0

当一个DLL退出时会有两个消息发出。DLL_PROCESS_DETCH,或者DLL_THREAD_DETCH,这要看你的程序是如何写的。使用FreeLibraryAndExitThread,这个函数在<核心编程>里有介绍第20章。Top

6 楼bareheadchl2004()回复于 2003-12-03 11:21:37 得分 0

有,在析构器中调用了  
  m_ISession.ReleaseDispatch();  
  不知道这个调用能否完全的释放m_ISession?  
   
  Top

7 楼bareheadchl2004()回复于 2003-12-03 15:42:27 得分 0

在Dll的DllMain中什么也没做,也就是说对DLL_PROCESS_DETCH,或者DLL_THREAD_DETCH的消息未加处理,请问会有什么影响吗?Top

8 楼bareheadchl2004()回复于 2003-12-03 15:55:45 得分 0

补充一点,在应用程序中有一个窗口使用了位于Dll中的CFriendSession类。Top

相关问题

  • 注入进程的退出错误——关于dll的摸索?(续)
  • 进程退出
  • 为什么进程退出时没有进入DllMain的DLL_PROCESS_DETACH?
  • 如何做一个在后台一直运行的dll,直到装载它的进程退出。
  • UNIX子进程的退出?
  • 进程退出问题
  • 退出进程问题?
  • dll ,ActiveX dll ,进程内的dll,进程外的dll有什么不同?
  • dll退出时出错?
  • dll注入进程为什么不行?

关键词

  • dll
  • cfriendsession
  • 进程
  • isession
  • 退出
  • detch
  • 调用
  • 析构
  • 释放
  • 使用

得分解答快速导航

  • 帖主:bareheadchl2004

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo