Форум: "Система";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
ВнизПовторный вызов RASDial Найти похожие ветки
← →
Jel (2003-04-02 12:28) [0]Есть код
procedure RasDialCallBack(MSG: integer; State: TRasConnState; Error: Integer); stdcall;
var s : string;
begin
s := DateTimeToStr(Now);
Form1.Dial_Done := (State >= RASCS_DONE) or (Error <> 0);
If Error <> 0 then s := format("%s, код ошибки %d",[Form1.GetStateText(State), Error])
Else s := Form1.GetStateText(State);
Form1.LogString(s);
end;
function TForm1.Connect(EntryName, User, Password: string) : integer;
var RDP : TRasDialParams;
HRC : THRasConn;
RCS : TRasConnStatus;
begin
Logstring("Установка соединения "+EntryName);
ZeroMemory(@RDP, SizeOf(RDP));
RDP.dwSize := SizeOf(RDP);
Move(EntryName[1], RDP.szEntryName, Length(EntryName));
Move(User[1], RDP.szUserName, Length(User));
Move(Password[1], RDP.szPassword, Length(Password));
HRC := 0;
Dial_Done := false;
RasDial(nil, nil, RDP, 0, @RasDialCallBack, HRC);
repeat Application.ProcessMessages until Dial_Done or Application.Terminated;
ZeroMemory(@RCS, SizeOf(RCS));
RCS.dwSize := SizeOf(RCS);
RasGetConnectStatus(HRC, RCS);
if RCS.rasconnstate = RASCS_CONNECTED then Result := HRC
else begin
RasHangUp(HRC);
Result := 0;
end;
end;
Работает на "Ура" но только один раз :(
При повторном вызове, например после ошибки соединения отвисает на repeat until...
CallBack функция НЕ вызывается, Dial_Done всегда false и так до Application.Terminate.
В чем проблема? Почему не вызывается RasDialCallBack и как это можно победить?
← →
Jel (2003-04-02 15:31) [1]Отвечу сам себе - вдруг кому сгодится ,)
После RasHangUp(HRC) надо дописать
repeat
Application.ProcessMessages;
Until RasGetConnectStatus(HRC, RCS) = ERROR_INVALID_HANDLE;
Иначе при повторном вызове RasDial будут проблемки из-за того, что RasHangUp завершается не дожидаясь, пока соединение будет закрыто и все связанные с ним ресурсы освободятся.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.011 c