Вниз
Скачать: CL | DM;

Повторный вызов 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.011 c
3-2815
prof
2003-05-13 08:51
2003.06.02
Выборка в переменную


6-3046
Gross
2003-04-01 22:01
2003.06.02
есть ип! надо узнать имя юзера, под которым он залогинился


1-2856
sapsi
2003-05-22 10:32
2003.06.02
Команда для активизации окна


7-3181
Stranger
2003-04-01 16:02
2003.06.02
Очистка клавиатурного буфера


4-3221
Psibug
2003-04-01 10:07
2003.06.02
Почему не работает (работает по разному) Sleep




   Наверх