CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

RasGetConnectionStatistics使用问题

楼主zlf_jack(风云剑客)2004-09-04 00:35:57 在 VC/MFC / 网络编程 提问

由于要对客户端网络流量进行监控,使用了如下函数:  
                              RasGetConnectionStatistics  
  用grep查找,发现ras.h下并没有其定义。  
   
  我以前的解决办法是直接在其头文件里面加入其定义,结果一点问题也没有!  
  现在重新装了英文版的VC,于是改成了调用dll,   从网上下了一个程序。  
  单独测试一点问题也没有!  
   
  但是集成到系统中却有大问题:  
  错误如下:  
  i386/chkesp.c   42   line  
  错误大意是esp值保存不对,函数调用方式错误,调用了其他的函数指针!  
   
  下面是我的关键代码:  
  LPRASDEVINFO   lpRasDevInfo;  
  HINSTANCE   hDLLib;             //   Handle   to   DLL.  
   
  typedef   struct   _RAS_STATS   {  
      DWORD       dwSize;  
      DWORD       dwBytesXmited;  
      DWORD       dwBytesRcved;  
      DWORD       dwFramesXmited;  
      DWORD       dwFramesRcved;  
      DWORD       dwCrcErr;  
      DWORD       dwTimeoutErr;  
      DWORD       dwAlignmentErr;  
      DWORD       dwHardwareOverrunErr;  
      DWORD       dwFramingErr;  
      DWORD       dwBufferOverrunErr;  
      DWORD       dwCompressionRatioIn;  
      DWORD       dwCompressionRatioOut;  
      DWORD       dwBps;  
      DWORD       dwConnectDuration;  
  }   RAS_STATS,   *PRAS_STATS;  
   
  typedef   DWORD   (*lpfnDllFuncRGCS)(HRASCONN   hRasConn,RAS_STATS   *lpStatistics);//RasGetConnectionStatistics  
  typedef   DWORD   (*lpfnDllFuncRENCS)(   LPRASCONN   lprasconn,   LPDWORD   lpcb,   LPDWORD   lpcConnections   );//RasEnumConnections  
   
  lpfnDllFuncRGCS   lpfnDllFuncConnstat;  
  lpfnDllFuncRENCS   lpfnDllFuncEnumConn;  
   
  //   load   function;  
  hDLLib=   LoadLibrary(_T("rasapi32"));  
  if(!hDLLib)  
  {  
  ::MessageBox(0,"Error   in   Loading   rasapi32.lib   file.","Internet   Connection   Status",MB_ICONERROR);  
  PostQuitMessage(0);  
  }  
   
  lpfnDllFuncConnstat   =   (lpfnDllFuncRGCS)GetProcAddress(hDLLib,"RasGetConnectionStatistics");  
  if(!lpfnDllFuncConnstat   )  
  {  
  ::MessageBox(0,"Error   in   Loading   RasGetConnectionStatistics   funciton.","Internet   Connection   Status",MB_ICONERROR);  
  FreeLibrary(hDLLib);  
  }  
   
  lpfnDllFuncEnumConn   =   (lpfnDllFuncRENCS)GetProcAddress(hDLLib,"RasEnumConnectionsA");  
  if(!lpfnDllFuncEnumConn   )  
  {  
  ::MessageBox(0,"Error   in   Loading   RasEnumConnectionsA   funciton.","Internet   Connection   Status",MB_ICONERROR);  
  FreeLibrary(hDLLib);  
  }  
   
  //   得到流量统计  
  void   CGetStatusDlg::GetConStatus()  
  {  
   
  try  
  {  
  RASCONN   *   lpRasConn;  
  DWORD           lpcb;  
  DWORD           lpcConnections;  
   
  lpRasConn   =   (LPRASCONN)   GlobalAlloc(GPTR,   sizeof(RASCONN));  
  lpRasConn->dwSize   =   sizeof(RASCONN);  
  lpcb   =   sizeof(RASCONN);  
     
  DWORD   nRet   =   lpfnDllFuncEnumConn(lpRasConn,   &lpcb,   &lpcConnections);  
   
   
  if   (nRet   !=   0)  
  {  
   
  FreeLibrary(hDLLib);  
  KillTimer(1);  
  EndDialog(TRUE);  
   
  }  
  else  
  {  
  RAS_STATS   *lpStatistics;  
  lpStatistics=   (RAS_STATS   *)GlobalAlloc(GPTR,   sizeof(RAS_STATS));  
  lpStatistics->dwSize=sizeof(RAS_STATS);  
  if(lpRasConn->hrasconn)  
  {  
  this->m_connectedto.Format("%s",   lpRasConn->szEntryName);  
   
  DWORD   nR=lpfnDllFuncConnstat(lpRasConn->hrasconn,lpStatistics);  
  if(nR   ==   ERROR_SUCCESS)  
  {  
  this->m_bytesreceived.Format("%d",lpStatistics->dwBytesRcved);  
  this->m_bytessent.Format("%d",lpStatistics->dwBytesXmited);  
  this->m_connectionspeed.Format("%d   bps",lpStatistics->dwBps);  
   
  CString   strsec;  
  int   nSec   =   lpStatistics->dwConnectDuration/1000;  
  nSec   %=     60;  
  int   nMin   =   lpStatistics->dwConnectDuration/60000;  
  nMin   %=   60;  
  int   nHour   =lpStatistics->dwConnectDuration/(60000*60);  
  nHour   %=   24;  
  this->m_connectionduration.Format("%2d   hrs   :   %2d   mins   :   %2d   secs",nHour,nMin,nSec);  
   
  this->m_comprecvd.Format("%d%%",lpStatistics->dwCompressionRatioIn);  
  this->m_compsent.Format("%d%%",lpStatistics->dwCompressionRatioOut);  
   
  this->m_framercvd.Format("%d",lpStatistics->dwFramesRcved);  
  this->m_framesent.Format("%d",lpStatistics->dwFramesXmited);  
  UpdateData(FALSE);  
  }  
  else  
  {  
  try  
  {  
  FreeLibrary(hDLLib);  
  KillTimer(1);  
  EndDialog(TRUE);  
  }  
  catch(CException*   theException2)  
  {  
  theException2->Delete();  
  }  
   
   
  }  
  }  
  else  
  {  
  try  
  {  
  FreeLibrary(hDLLib);  
  KillTimer(1);  
  EndDialog(TRUE);  
  }  
  catch(CException*   theException)  
  {  
  theException->Delete();  
  }  
  }  
  }  
  }  
  catch(CException*   theException1)  
  {  
  theException1->Delete();  
  }  
   
  }  
   
  错误出现在函数调用的地方。  
  这种错误我还没有遇到过,什么原因呢?  
  感觉使用dll总是问题多多,出错也不知道什么原因! 问题点数:100、回复次数:4Top

1 楼louifox(兰陵笑笑生)回复于 2004-09-04 02:46:07 得分 50

DWORD   RasGetConnectionStatistics(  
      HRASCONN   hRasConn,               //   handle   to   the   connection  
      RAS_STATS   *lpStatistics     //   buffer   to   receive   statistics  
  );  
  Header:   Declared   in   Ras.h.  
      Library:   Use   Rasapi32.lib.  
  ras.h   有定义的Top

2 楼zlf_jack(风云剑客)回复于 2004-09-04 03:47:43 得分 0

我是在老版本的VC6.0下开发,他没有定义,并且我的winver   =   0x0401  
  我改在VS.net   2003下采用直接调用一点问题都没有!  
   
  所以,我觉得太怪了!Top

3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-05 12:24:58 得分 50

当然有定义了。要不下个PlatformSdk.Top

4 楼zlf_jack(风云剑客)回复于 2004-09-05 15:41:25 得分 0

有没有定义其实无所谓,直接加到头文件就可以了!我只是搞不懂动态寻址调用会出问题!  
  而同样的头文件和实现放到新建工程却没有任何问题!这才是我关心的!  
   
  感觉这里停留在表面应用太多,一旦问题涉及到源代码级便没人能回答了!Top

相关问题

  • 使用
  • *& 使用
  • textbox的使用
  • tabstrip的使用
  • Memo的使用
  • CListView的使用
  • JDBC的使用
  • 使用FindWindowEx?
  • MediaPlayer的使用
  • Treeview使用

关键词

  • 函数
  • 文件
  • dll
  • rasgetconnectionstatistics
  • hrasconn
  • 调用
  • hdllib
  • ras
  • rasapi32
  • 定义

得分解答快速导航

  • 帖主:zlf_jack
  • louifox
  • DentistryDoctor

相关链接

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

广告也精彩

反馈

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