CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

在DLL中使用主程序的ListCtrl为何不行?

楼主zxjrainbow(小笨象)2005-12-04 10:09:05 在 VC/MFC / 进程/线程/DLL 提问

我想把主程序的ListCtrl传递到DLL的中使用,于是就传了ListCtrl的HWND过去。  
  可是DLL中一使用,就会出错,是类似于使用非法内存地址的错误。  
  DLL的函数是:extern   "C"   __declspec(dllexport)   void   __stdcall   GetListCtrl(HWND   ListCtrlHwnd)  
  {  
        AFX_MANAGE_STATE(AfxGetStaticModuleState(   ))  
        CListCtrl   *   tt   =   (CListCtrl*)ListCtrlHwnd;  
        tt->.....   //这里,不管做什么都会出错。  
  }  
  请各位帮忙一下。谢谢了。 问题点数:100、回复次数:9Top

1 楼DrSmart(斯玛特)回复于 2005-12-04 10:21:27 得分 0

当然会出错,你还会发现在release版中就不会出错了,获取的hwnd不是这样用的Top

2 楼zxjrainbow(小笨象)回复于 2005-12-04 11:50:47 得分 0

请问,怎么样用才是正确的呢?  
  VC我只是初学者,谢谢了。Top

3 楼zxjrainbow(小笨象)回复于 2005-12-04 15:58:51 得分 0

up...Top

4 楼zxjrainbow(小笨象)回复于 2005-12-04 16:56:56 得分 0

再up....Top

5 楼rfa(实况狐狸)回复于 2005-12-05 15:17:18 得分 50

楼主呀,你传递的是句柄,能把它直接转成指针用吗......  
  要用CListCtrl的Attach方法,这样写:  
  {  
      AFX_MANAGE_STATE(AfxGetStaticModuleState(   ))  
   
      CListCtrl     tt;  
   
      if   (   !tt.Attach(ListCtrlHwnd)   )    
      {  
   
          //   shit!   Are   u   sure   the   handle   type   is   ListCtrl   ?!!  
   
          return;  
      }  
   
      /*  
            Do   SoMeThInG   U   Wanna   do   !  
        */  
   
      tt.Detach();   //   最后,不用的时候记得放掉人家哦~  
  }Top

6 楼zxjrainbow(小笨象)回复于 2005-12-05 16:09:02 得分 0

谢谢!试完给分!  
  Top

7 楼zxjrainbow(小笨象)回复于 2005-12-05 16:34:11 得分 0

 
  调用函数:  
  void   CTestDlg::OnButton2()  
  {  
                  m_theCtrl   =   (CListCtrl*)GetDlgItem   (IDC_LIST1);   //这里是正确的,使用也没问题。  
   
                  HINSTANCE DLLhInstance;  
   
  char NewMarsMenuName[MAX_PATH];  
  typedef   int   (WINAPI   *CodeCheck)(HWND,char*,int);  
   
  memset(NewMarsMenuName,0x00,sizeof(NewMarsMenuName));  
  DLLhInstance=LoadLibrary("test.dll");  
      if(!DLLhInstance)  
  { //如果找不到,  
  return   ;  
  }  
  CodeCheck   pCodeCheck=(CodeCheck)GetProcAddress(DLLhInstance,"CodeCheck");  
  if(pCodeCheck)  
  {  
  pCodeCheck(m_theCtrl->m_hWnd,NewMarsMenuName,1);  
   
   
  }  
  FreeLibrary(DLLhInstance);  
  }  
  //---------------------------------------------------------------------------  
   
  DLL中的函数:  
   
  extern   "C"   int   _declspec(dllexport)   __stdcall   CodeCheck(HWND   ListViewCtrlHwnd,  
  char   *szFileName,int   iOptionFlag)  
  {  
  //ListViewCtrlHwnd   是主程序中的ListViewCtrl的句柄。  
  //szFileName       是要检查的文件名。  
  //iOptionFlag     是检查的选项。  
  AFX_MANAGE_STATE(AfxGetStaticModuleState());  
   
  int   nColumnCount;  
  CListCtrl*   pListViewCtrl   =   NULL;  
  pListViewCtrl->Attach(ListViewCtrlHwnd);       //这里出错了。还是出错了,为何啊!!!  
   
  if(pListViewCtrl)  
  {  
  nColumnCount   =   pListViewCtrl->GetHeaderCtrl()->GetItemCount();  
  }  
                    pListViewCtrl->des.....   ;//  
   
  return   0;  
  }  
  //---------------------------------------------------------------------------  
   
  本想先给您一半分.可是不行....Top

8 楼hpig(喜猪)回复于 2005-12-06 03:00:27 得分 50

CListCtrl*   pListViewCtrl   =   NULL;  
  pListViewCtrl->Attach(ListViewCtrlHwnd);       //这里出错了。还是出错了,为何啊!!!  
   
  能不出错吗!  
  一个空指针!  
   
  rfa写的很清楚了,你就按照人家那么写!  
  CListCtrl     tt;  
   
  if(!tt.Attach(ListCtrlHwnd)){  
    //...  
    tt.Detach();  
   
  }  
   
  或者  
  CListCtrl*   pListViewCtrl   =   new   CListCtrl();  
  pListViewCtrl->Attach(ListViewCtrlHwnd);       //这里出错了。还是出错了,为何啊!!!  
   
  if(pListViewCtrl)  
  {  
  nColumnCount   =   pListViewCtrl->GetHeaderCtrl()->GetItemCount();  
  }  
                    pListViewCtrl->des.....   ;//  
   
  pListViewCtrl->Detach();  
  delete   pListViewCtrl;  
   
  return   0;  
   
   
   
  Top

9 楼zxjrainbow(小笨象)回复于 2005-12-06 22:28:43 得分 0

成功!  
  给分,是我粗枝大叶了。  
  谢谢两位了。  
  加分再给分。  
  谢谢。Top

相关问题

  • 100分问:dll 中使用ado导至主程序退出异常
  • DLL中的对话框上的数据如何给主程序使用
  • 使用时全局钩子,怎样实现在Dll中发消息给主程序,使主程序的界面改变?
  • 我在DLL中定义了一个类,能否在主程序中使用这个类??
  • 请教:如何使钩子作用于主程序及主程序加载的dll中?
  • dll中怎样调用主程序中的函数?
  • 请问在DLL中,如何向主程序发送消息??????
  • dll中向主程序发消息怎么收不到
  • 请问如何在DLL中执行主程序中的函数???
  • 能否将主程序中的TDataModule1指针传递到DLL中?

关键词

  • 函数
  • dll
  • plistviewctrl
  • 出错
  • clistctrl
  • 主程序
  • codecheck
  • listviewctrlhwnd
  • dllhinstance
  • listctrlhwnd

得分解答快速导航

  • 帖主:zxjrainbow
  • rfa
  • hpig

相关链接

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

广告也精彩

反馈

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