Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прервать выполнение функции RasDial [D7, WinXP]


Страницы:   1 2

Дмитрий_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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо