64次浏览

关于 RasDial函数不同系统版本拨号失败问题

请看下面一段拨号代码:

BOOL PPOE::DailPPPOE(wchar_t* PPPOEname, wchar_t* UserName, wchar_t* UserPassWord)//连接宽带, 成功返回假, buff接收返回ip
{

        HRASCONN  hrasconn = NULL; //存放活动连接句柄, 用于断开连接
        RASDIALPARAMS rdParams;
        memset(&rdParams, 0, sizeof(rdParams));
        rdParams.dwSize = sizeof(RASDIALPARAMS );//这个非常重要



        wcscpy_s(rdParams.szEntryName, PPPOEname);
        wcscpy_s(rdParams.szUserName, UserName);
        wcscpy_s(rdParams.szPassword, UserPassWord);

        BOOL ret = RasDial(NULL, NULL, &rdParams, 0L, NULL, &hrasconn);


        return ret;

}

然而以上这段代码,在我本机Win10下测试是可以实现拨号的,而编译后的程序放在Win7下就行不通了,于是百度了一番发现是RASDIALPARAMS结构的大小问题,我很纳闷我用的sizeof 哦,具体原因好像是说在本机编译后,RASDIALPARAMS结构大小就默认Win10系统下的大小了,从而放在其他系统版本上不好使。

注意RASDIALPARAMS结构的大小在各个系统是不同大小的,不设置好往往会导致拨号失败! 下面给出我再各个系统测试得到的大小,

以下数据经过实际环境测试得出
        //win10 x64 dwSize=2112  RasDial宽字节版本
        //win7 x64 dwSize=2096 RasDial宽字节版本

        //win7 x64 dwSize=1052 RasDial多字节版本
        //win10 x64 dwSize=1068  RasDial多字节版本
特别注意函数字符版本哦, 上面都写了,然后使用时直接写入固定大小就OK了!完美拨号。

发表评论

电子邮件地址不会被公开。 必填项已用*标注