VC创建连接PPPOE链接

【VC创建连接PPPOE链接】最近在做一个pppoe拔号程序,到了项目的后面,要做一个拔号连接,使得可以通过程序来进行拔号,在网上乱搜了一遍,大概知道了是通过Ras系列的api来做的.然后直奔MSDN里,随便输入一个ras api的函数名,跳到ras function overview,嘿,找到了,发现了RasCreatePhonebookEntry,呵,问题解决了,没看参数怎样使用,马上打开vs2005,写个程序测试一下
int main(....)
{
DWORD d = RasCreatePhonebookEntry(NULL, "my con");
DWORD err = GetLastError();
}
跑起来,发现,执行到RasCreatePhonebookEntry的时候,弹出一个设置连接向导..晕,这怎么行啊..回去细看MSDN里这个函数的说明,没看到可以把向导去掉的选项,但是发现了,这个函数实际上是调用RasEntryDlg这个函数的,跳到RasEntryDlg这个函数里去看看,看到参数要求传入一个RASENTRYDLG结构,估计去掉向导的选项就在这个结构里面了吧?看了这个结构的每个成员的说明,也没有找到去掉向导的设置...郁闷..
没法..再去google搜搜吧....几毫秒过去了(google真好,我这56k网速的地方也能么快,感激!),找到一个贴子,里面创建连接是用RasSetEntryProperties来创建拔号连接的,嘿,咋一看还有没想来,再细想,哦,原理是利用"设置->不存在则创建"这样一个规则,所以说啊,用微软的东西真是安逸!
好了,方法找到了,敲代码,用RasSetEntryProperties来创建连接....几毫秒过去了(观众:这就是传说中的"敲键盘时发型不乱"的功力啊!久大侠!久仰久仰),搞定,呵呵,下面贴下代码,再加点注释,还有详细了解的,自己去MSDN看,也没什么难的地方.我这里的代码是创建PPPOE的连接,所以有些参数要根据你自己的需要改一下.
另外想说的是...blogcn这里居然没有代码彩显的代码!你这不是叫我去换个blog吗!建议加上.
VC创建连接PPPOE链接
文章图片
#include " stdafx.h "
VC创建连接PPPOE链接
文章图片
#include < windows.h >
VC创建连接PPPOE链接
文章图片
#include < ras.h >
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
int _tmain( int argc, _TCHAR * argv[])
VC创建连接PPPOE链接
文章图片
VC创建连接PPPOE链接
文章图片
VC创建连接PPPOE链接
文章图片
{
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
LPRASENTRY lpRasEntry = NULL;
VC创建连接PPPOE链接
文章图片
DWORD cb = sizeof(RASENTRY);
VC创建连接PPPOE链接
文章图片
DWORD dwBufferSize = 0;
VC创建连接PPPOE链接
文章图片
DWORD dwRet = 0;
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
// 取得entry的大小,这句也不知道是不是必须的,因为sizeof(RASENTRY)和这里取到的dwBufferSize是一样的,不过还是Get一下安全点
VC创建连接PPPOE链接
文章图片
RasGetEntryProperties(NULL, L"", NULL, &dwBufferSize, NULL, NULL);
VC创建连接PPPOE链接
文章图片
if (dwBufferSize == 0)
VC创建连接PPPOE链接
文章图片
return -1;
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
lpRasEntry = (LPRASENTRY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBufferSize);
VC创建连接PPPOE链接
文章图片
if (lpRasEntry == NULL)
VC创建连接PPPOE链接
文章图片
return -2;
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
ZeroMemory(lpRasEntry, sizeof(RASENTRY));
VC创建连接PPPOE链接
文章图片
lpRasEntry->dwSize = dwBufferSize;
VC创建连接PPPOE链接
文章图片
lpRasEntry->dwfOptions = RASEO_PreviewUserPw|RASEO_RemoteDefaultGateway; // RASEO_PreviewUserPw需要显示ui
VC创建连接PPPOE链接
文章图片
lpRasEntry->dwType = RASET_Broadband;
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
lstrcpy(lpRasEntry->szDeviceType, RASDT_PPPoE);
VC创建连接PPPOE链接
文章图片
lstrcpy(lpRasEntry->szDeviceName, L"azol");
VC创建连接PPPOE链接
文章图片
lpRasEntry->dwfNetProtocols = RASNP_Ip;
VC创建连接PPPOE链接
文章图片
lpRasEntry->dwFramingProtocol = RASFP_Ppp;
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
dwRet = RasSetEntryProperties(NULL, L"my con", lpRasEntry, dwBufferSize, NULL, 0); // 创建连接
VC创建连接PPPOE链接
文章图片
HeapFree(GetProcessHeap(), 0, (LPVOID)lpRasEntry);
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
if (dwRet != 0)
VC创建连接PPPOE链接
文章图片
return 3;
VC创建连接PPPOE链接
文章图片

VC创建连接PPPOE链接
文章图片
return 0;
VC创建连接PPPOE链接
文章图片
}
VC创建连接PPPOE链接
文章图片

    推荐阅读