VC-RAS拨号源码详解(2009-11-17 08:25:24)转载▼标签: ifidc错误代码it
2014-01-10 18:36
423 查看
VC-RAS拨号源码详解
(2009-11-17 08:25:24)转载▼
标签:ifidc错误代码it |
我们想要在程序中建立一个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拨号程序功能的简单实现,有不妥之处,欢迎指正。
相关文章推荐
- 常见网络拨号错误代码详解
- 如何实现多个线程同步 (2013-11-10 12:07:24)转载▼ 标签: it 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题,Java实现线程同步的方法很多
- VC中GetLastError()获取错误信息的使用,以及错误代码的含义
- IIS错误代码详解
- Java 中break和continue结合标签标示符中断循环示例详解(附源码)
- cl编译器的使用错误详解(vc)
- ASP错误代码详解 [转]
- 【转载】C++文件操作详解(ifstream、ofstream、fstream)
- Struts源码研究 - html-Link标签篇[转载]
- VC:API查看错误代码和信息
- 【转载】SQL Server 错误代码:17058 。解决方案
- Linux网络流量实时监控ifstat iftop命令详解(转载)
- FTP上传文件提示Serv-U FTP Server 错误代码详解
- 网页HTML代码中Meta标签详解
- 【转载】html标签之Object标签详解
- s:if 标签 字符串比较 正确用法和错误用法
- 错误“AxImp.exe”已退出,代码为 -1163019603【转载及个人看法】
- VC++编译代码出现LNK2005错误的一种情况的解决