VC-RAS拨号源码详解(2009-11-17 08:25:24)转载▼标签: ifidc错误代码it

来源:互联网 发布:不是c语言关键字 编辑:程序博客网 时间:2024/06/11 12:40

VC-RAS拨号源码详解

(2009-11-17 08:25:24)
转载
标签:

if

idc

错误代码

it

 

    很少写博文,曾经在网上找了许多关于RAS拨号源码的文章,但看的都是一支半解,不是看不懂,只是写的不详,结果的确让自己费了许多心思,我所用到的RAS拨号,只要运用于无线网卡的拨号上网功能,如果还想实现其他功能的,欢迎交流,QQ:309354447。

     我们想要在程序中建立一个RAS拨号的功能,首先建立一个VisualC的应用框架,在Setting中为应用程序加入Rasapi32.lib静态库,并添加头文件:#include "ras.h",

或者:#pragma comment(lib, "Rasapi32.lib")也可以。接着第二步:

声明公有函数:static void WINAPI RasDialFunc( UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError );再声明公有变量:HRASCONN hRasConn;

而RasDialFunc函数实现:则如下代码:

void WINAPI CRasDialDlg::RasDialFunc(UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError)
{
 CRasDialDlg * RasDlg = (CRasDialDlg*)AfxGetApp()->m_pMainWnd; 
 RasDlg->PostMessage(WM_RASDIALEVENT,(WPARAM)rasconnstate,(LPARAM)dwError);
  
        CString str;
 switch(rasconnstate)
 {
  case RASCS_OpenPort:
   str= "正在打开端口...";
   break;

  case RASCS_PortOpened:
   str= "端口已经打开";
   break;

  case RASCS_ConnectDevice:
   str= "正在连接设备";
   break;

  case RASCS_DeviceConnected:
   str= "设备已经连接";
   break;

  case RASCS_AllDevicesConnected:
   str= "所有设备已经连接上";
   break;

  case RASCS_Authenticate:
   str= "正在验证用户名和密码...";
   break;

  case RASCS_AuthNotify:
   str= "IDS_RASCS_7";
   break;

  case RASCS_AuthRetry:
   str= "再次验证用户名和密码...";
   break;

  case RASCS_AuthCallback:
   str= "回收验证";
   break;

  case RASCS_AuthChangePassword:
   str= "改变密码请求";
   break;

  case RASCS_AuthProject:
   str= "开始连接状态";
   break;

  case RASCS_AuthLinkSpeed:
   str= "计算连接速度...";
   break;

  case RASCS_AuthAck:
   str= "Authentication Acknowledged";
   break;

  case RASCS_ReAuthenticate:
   str= "Reauthenticatation Started";
   break;

  case RASCS_Authenticated:
   str= "Authenticated";
   break;

  case RASCS_PrepareForCallback:
   str= "Preparation For Callback";
   break;

  case RASCS_WaitForModemReset:
   str= "等待设备重置...";
   break;

  case RASCS_WaitForCallback:
   str= "Waiting For Callback";
   break;

  case RASCS_Interactive:
   str= "Interactive";
   break;

  case RASCS_RetryAuthentication:
   str= "再次验证";
   break;

  case RASCS_CallbackSetByCaller:
   str= "Callback Set By Caller";
   break;

  case RASCS_PasswordExpired:
   str= "密码过期";
   break;

  case RASCS_Connected:
   str= "已经连接上";
   break;

  case RASCS_Disconnected:
   str= "已经断开连接";
   break;

  default:
   str= "未定义的错误代码";
   break;
 }

 AfxGetMainWnd()->SetDlgItemText(IDC_STATIC_STATE,str);
}

 

//拨号功能实现如下:

void CRasDialDlg::OnButton1()     //连接网络
{
 RASDIALPARAMS rdParams;       //拨号连接的信息
 ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
 rdParams.dwSize = sizeof(RASDIALPARAMS);
 lstrcpy(rdParams.szEntryName, "CDMA Express Data Card");
 lstrcpy(rdParams.szUserName, "card");
 lstrcpy(rdParams.szPassword, "card");
  
 hRasConn = NULL;
 DWORD dwRet = RasDial(NULL, NULL, &rdParams, 0L, (RASDIALFUNC)RasDialFunc, &hRasConn);
 if(dwRet)
 {
  CString szMsg;
  if(RasGetErrorString((UINT)dwRet, szMsg.GetBuffer(256),256)!=0)
  {
   szMsg.ReleaseBuffer();
   szMsg.Format("未知的远程访问错误,错误代码为:%ld.",dwRet);
  }
  else
   szMsg.ReleaseBuffer();
  
  CString buf;
  buf.Format("错误代码为:%ld.",dwRet);
  
  szMsg += buf;
  
                MessageBox(szMsg,"拨号失败",MB_OK|MB_ICONSTOP);
  hRasConn = NULL;
 }

}

 

//断开拨号连接功能如下:

void CRasDialDlg::OnButton2()

 SetDlgItemText(IDC_STATIC_STATE,"正在断开网络,请稍候...");
 RASCONN ras[20];
 DWORD dwSize, dwNumber, dwCount;   
 ras[0].dwSize=sizeof(RASCONN);
 dwSize =sizeof(ras); 
 if (::RasEnumConnections(ras, &dwSize, &dwNumber)==0) 
  
  for (dwCount=0; dwCount<dwNumber; dwCount++ )    //依次关闭所有的连接
  {
   if (::RasHangUp(ras[dwCount].hrasconn)!=0)  //如果函数成功,则返回0
   {
    break;
   }
   else
   {
    SetDlgItemText(IDC_STATIC_STATE,"已断开网络");
   }
  }
  
}

 

这就是实现RAS拨号程序功能的简单实现,有不妥之处,欢迎指正。

0 0
原创粉丝点击