#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, это может быть любой из выполненных переводов. Тот, который вы связали, кажется очень старым и не поддерживает Юникод.