win2000 or NT下调用RASAPI32.dll 拨号的问题

顾君彦 北京紫博蓝网络发展有限公司 技术总监  2002-12-25 05:39:02
调用时,有一个通讯薄问题。在WIN9X下都无此问题,调用也很正常。
到WIN2000 或NT下,会出现621等错误
提示不能打开通讯薄导致无法拨号。

怎么才能正常调用这些外部函数?

高手指点。
...全文
65 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
anyshot 2003-02-13
我也不知道,不过我知道有个不需要电话本的拨号函数,你可以去查查。
希望这样可以在WIN2000下拨号正常 。
回复
bbwolf 2003-01-23
需要先手动Create一个拨号连接,然后在程序中取所有拨号连接,才能使用。
回复
顾君彦 2002-12-26
RasDial 第二个参数为NULL的话,在WIN2000或WINNT下会工作不正常。
我正要解决这个问题。有什么办法可以填写正确的参数吗?
回复
TheAres 2002-12-26
参考下面的例子.

copy from http://groups.google.com/groups?q=RasDial+C%23&hl=en&lr=&ie=UTF8&oe=UTF8&selm=TQZSwId5BHA.2436%40cpmsftngxa08&rnum=3

using System;
using System.Runtime.InteropServices;

namespace RAS
{
public class RasManager
{
public const int RAS_MaxEntryName = 256;
public const int RAS_MaxPhoneNumber = 128;
public const int UNLEN = 256;
public const int PWLEN = 256;
public const int DNLEN = 15;
public const int MAX_PATH = 260;
public const int RAS_MaxDeviceType = 16;
public const int RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;

public delegate void Callback(uint unMsg, int rasconnstate, int dwError);

[StructLayout(LayoutKind.Sequential, Pack=4, CharSet=CharSet.Auto)]
public struct RASDIALPARAMS
{
public int dwSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=RAS_MaxEntryName + 1)]
public string szEntryName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=RAS_MaxPhoneNumber + 1)]
public string szPhoneNumber;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=RAS_MaxCallbackNumber+ 1)]
public string szCallbackNumber;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=UNLEN + 1)]
public string szUserName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=PWLEN + 1)]
public string szPassword;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=DNLEN + 1)]
public string szDomain;
public int dwSubEntry;
public int dwCallbackId;
}

[DllImport("rasapi32.dll", CharSet=CharSet.Auto)]
public static extern int RasDial (int lpRasDialExtensions, string
lpszPhonebook,
ref RASDIALPARAMS lprasdialparams, int dwNotifierType,
Callback lpvNotifier, ref int lphRasConn);

private RASDIALPARAMS RasDialParams;
private int Connection;

public RasManager()
{
Connection = 0;
RasDialParams = new RASDIALPARAMS();
RasDialParams.dwSize = Marshal.SizeOf(RasDialParams);
}

#region Properties
public string UserName
{
get
{
return RasDialParams.szUserName;
}
set
{
RasDialParams.szUserName = value;
}
}

public string Password
{
get
{
return RasDialParams.szPassword;
}
set
{
RasDialParams.szPassword = value;
}
}

public string EntryName
{
get
{
return RasDialParams.szEntryName;
}
set
{
RasDialParams.szEntryName = value;
}
}
#endregion

public int Connect()
{
Callback rasDialFunc = new Callback(RasManager.RasDialFunc);
RasDialParams.szEntryName += "\0";
RasDialParams.szUserName += "\0";
RasDialParams.szPassword += "\0";
int result = RasDial (0, null, ref RasDialParams, 0, rasDialFunc, ref
Connection);
return result;
}

public static void RasDialFunc(uint unMsg, int rasconnstate, int dwError)
{
}
}
}
回复
CHReich 2002-12-25
我也想知道!
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.