1

我正在尝试连接到 VPN 服务器,但没有成功,我创建了一个名为“VPN”的连接。

var
 p : TRasDialParamsA;
 R : LongInt;
 hRAS : THRasConn;
begin
 FillChar(p, SizeOf(TRasDialParams), 0);
 p.dwSize := sizeof(TRasDialParams);
 p.szEntryName := 'VPN';
 R := RasDial(nil, 'VPN', p, 0, nil, hRas);
 MessageBoxA(0, pAnsichar(inttostr(r)), 'err!', $40);
end;

错误代码出现 #6(#606 http://support.microsoft.com/kb/163111 “端口未连接。”)

我能做些什么?

谢谢。

4

1 回答 1

1

在 Delphi 2009 及更高版本中,RasDial()映射到RawDialW()以 aTRasDialParamsW作为输入的 。但是您声明p为 as TRasDialParamsA,因此您将 Ansi 数据传递给RasDialW()需要 Unicode 数据的数据。

在所有 Delphi 版本中删除A和 letTRasDialParams映射到正确的类型(调用时您已经依赖该行为SizeOf())。

同样,您还需要修复您的MessageBox()呼叫。它在 Delphi 2009+ 中同样被破坏。

尝试这个:

var
  p : TRasDialParams;
  R : LongInt;
  hRAS : THRasConn;
begin
 ZeroMemory(@p, SizeOf(p));
 p.dwSize := SizeOf(p);
 p.szEntryName := 'VPN';
 R := RasDial(nil, 'VPN', p, 0, nil, hRas);
 MessageBox(0, PChar(IntToStr(r)), 'err!', MB_OK or MB_ICONINFORMATION);
end;
于 2014-07-01T01:19:15.447 回答