您的位置:首页 > 编程语言

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

2014-01-10 18:36 423 查看

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拨号程序功能的简单实现,有不妥之处,欢迎指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: