![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прервать выполнение функции RasDial [D7, WinXP]
Дмитрий_05 © (2005-10-12 12:32:00)Я как понял работает все это вот как: вызывается функция RasDial(nil, nil, dParam, 0, @RasCallBack, hRas); и по ходу ее выполнения посылает сообщения функции procedure RasCallBack(Msg: Integer; State: TRasConnState; Error: Integer); stdcall; и уже в этой функции обрабатывать те или иные события. А вот можно ли прервать выполнение функции RasDial?
Дмитрий_05 (2005-10-21 12:33:00) [21]А в функции RasGetConnectStatus, из примера $hade (19.10.05 09:25) [4], наверно нужно вместо переменной hCurrentConnection поставить hRas, ведь в ней же хендл соединения хранится..? и переменную Statпросто в var-е объявить как TRasConnStatusA?
$hade (2005-10-19 09:25:00) [22]> if FConnect then Connect; // в этой процедуре и находится процедура RasDial
> if FConnect = true then Connect;
а зачем вызываешь connect и рекурсивно в connect и в самом RasCallBack?
из Connect рекурсию убери...(тем более что RasDial вызывается у тебя асинхронно и сразу после вызова вернёт управление обратно...)
а на Disconnect
Fconnect:=false;
RasHangUp(hRas);
после вызова HangUp произойдет вызов rasCallback с кодом ошибки(или состояния) = 619 (порт закрыт) - можешь считать и это отменой =)
кста(подсказочка)...
на Disconnect (да и в любом месте где вызываешь RasHangUp)
RasHangUp;
repeat Sleep(0);
until RasGetConnectStatus(hCurrentConnection,Stat)<> ERROR_INVALID_HANDLE;
(грубо говоря - не все модемы "одинаково полезны" - некоторым надо время на HangUp =)
stozlen (2005-10-19 02:50:00) [23]var
RasDialer: TRasDialer;
procedure Button1Click(Sender: TObject);
begin
RasDieler.HangUp;
end;
Дмитрий_05 (2005-10-18 20:16:00) [24]Всеравно иногда не выключается. У меня в процедуре RasCallBack идет следующий код:
FConnect: boolean // переменная, которая определяет перезванивать или нет, т.е. при нажатии на "Connect" FConnect:=true, а на "Disconnect" FConnect:=false
if Error <> 0 then
begin
RasGetErrorString(Error, C, 100);
if C <> '' then Form1.Label5.Caption := C; //иногда бывает что C='', почему не знаю
if FConnect then Connect; // в этой процедуре и находится процедура RasDial
procedure TForm1.Connect; // процедура Connect
begin
if hRas <> 0 then RasHangUp(hRas);
hRas := 0;
Application.ProcessMessages;
if RasDial(nil, nil, dParam, 0, @RasCallBack, hRas) <> 0 then
begin
//Sleep(1000);
if FConnect = true then Connect;
end;
end;
так вот незнаю почему, иногда бывает так, что нажмешь на "Disconnect", а звонить всеравно продолжает... В чем дело?
$hade (2005-10-13 13:51:00) [25]собсно RasHangUp