RasDial — подключение к VPN-серверу

#delphi #delphi-xe2 #delphi-7 #delphi-xe #delphi-xe6

#delphi #delphi-xe2 #delphi-7 #delphi-xe #delphi-xe6

Вопрос:

Я пытаюсь подключиться к 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 «Порт не подключен».)

что я могу сделать?

спасибо.

Комментарии:

1. Используете ли вы для этого какую-либо конкретную библиотеку? Я имею в виду, где TRasDialParamsA и THRasConn определены?

2. Это так? read.pudn.com/downloads67/sourcecode/comm/modem/241368 /…

Ответ №1:

В Delphi 2009 и более поздних версиях RasDial() сопоставляется с RawDialW() , который принимает TRasDialParamsW в качестве входных данных. Но вместо этого вы объявляете p as TRasDialParamsA , поэтому вы передаете данные Ansi, RasDialW() которые ожидают данные в Юникоде.

Отбросьте A и позвольте TRasDialParams сопоставить с правильным типом во всех версиях Delphi (вы уже полагаетесь на это поведение при вызове 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;
  

Комментарии:

1. Хм, я даже искал «Delphi RasDial» и нашел только сторонние библиотеки и модули. Если это часть Delphi, в каком модуле она находится?

2. @JerryDodge: RasDial() это функция Win32 API, но Delphi не объявляет ее ни в одном из своих модулей Windows / RTL, пользователи должны объявлять ее сами, и именно здесь вступает в игру сторонний код, подобный тому, на который вы ссылались. Однако это не меняет того, что я сказал в своем ответе.

3. @JerryDodge, вам следует задать конкретный вопрос по этому поводу. Существует ряд переводов (R) RASAPI, выполненных ранее энтузиастами, в то время как Borkadero никогда этого не делал. Наиболее примечательным, как обычно, является JEDI.

4. @FreeConsulting Да, именно поэтому я задал в комментариях к вопросу. Видя, что у него есть опция A и W , я знаю, что это должна быть сторонняя библиотека.

5. @JerryDodge, это может быть любой из выполненных переводов. Тот, который вы связали, кажется очень старым и не поддерживает Юникод.