Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Разрыв соединения с инетом   Найти похожие ветки 

 
@ac   (2004-02-01 07:51) [0]

Разрыв соединения с инетом

Делаю так:

type
TRasConn = record
  Size: DWORD;
  Handle: THandle;
  Name: array [0..20] of AnsiChar;
end;

TRasEnumConnections = function (var RasConn: TRasConn; var Size: DWORD; var Connections: DWORD): DWORD stdcall;

TRasHangUp = function (Handle: THandle): DWORD stdcall;

function DisconnectDialUp: Boolean;
var
Lib: HINST;
RasEnumConnections: TRasEnumConnections;
RasHangUp: TRasHangUp;
RasConn: TRasConn;
Size, Connections: DWORD;
begin
Result:=True;
Lib:=LoadLibrary("rasapi32.dll");
try
  RasEnumConnections := GetProcAddress(Lib, "RasEnumConnectionsA");
  RasHangUp := GetProcAddress(Lib, "RasHangUpA");
  FillChar(RasConn, SizeOf(RasConn), 0);
  RasConn.Size := SizeOf(RasConn);
  RasEnumConnections(RasConn, Size, Connections);
  RasHangUp(RasConn.Handle);
  Sleep(3000);  
finally
  FreeLibrary(Lib);
end;
end;


Не разрывает.
RasEnumConnections выдает попеременно то 0 (т.е. функция сработала), то 8 (неизвестно что).
Но даже если выдает 0, то все равно RasConn, Size, Connections остаются пустыми.

В чем проблема?
(саму функцию DisconnectDialUp я естественно в программе вызвать не забываю :))


 
Verg ©   (2004-02-01 11:25) [1]


> RasEnumConnections(RasConn, Size, Connections);


Параметр Size на входе должен содержать размер буфера.
Если этого размера ф-ции будет недостаточно, то в эту переменную ф-ция запишет необходимй размер, а сама вернет ошибку ERROR_BUFFER_TOO_SMALL или ERROR_NOT_ENOUGH_MEMORY.
Т.о., перед ее вызовом необходимо сделать:
Size := sizeof(RasConn);

И обязательно анализировать результат выполнения ф-ции.


 
@ac   (2004-02-02 07:53) [2]

Я пробовал изменять размер буфера. Проверял - 32 байта выделяет. Потом даже пробовал добавлять лишнюю сотню байт.
Очевидно проблема в другом.


 
@ac   (2004-02-02 08:02) [3]

Выяснилось, что пример работает только в Win9x
Что с XP делать?


 
Digitman ©   (2004-02-02 09:25) [4]


> @ac   (02.02.04 08:02) [3]


> Что с XP делать?


ему про фому, он все про ерему)

тебе же сказали :

> обязательно анализировать результат выполнения ф-ции


!!


 
@ac   (2004-02-05 08:06) [5]

"анализировать результат выполнения ф-ции"
это так что ли:

var
res:integer;

res:=RasEnumConnections(RasConn, Size, Connections);
case res of
    0:begin
       ShowMessage("Все Ok!");
      end;
    1:begin
       ...
      end;  
    ...
    else ShowMessage("не все Ok!")
end;

Так все равно RasConn, Size, Connections не меняются. А в чем смысл анализа?
А вообще, я сделал все предельно просто, старым добрым ламерским способом - перебором:

  for i:=1 to 20000 do RasHangUp(i);

Неэлегантно.


 
Verg ©   (2004-02-05 08:34) [6]

Ты это читал?


> Verg ©   (01.02.04 11:25) [1]


 
Dimka Maslov ©   (2004-02-06 09:03) [7]

ShowMessage(SysErrorMessage(GetLastError)) Напишет тебе причину ошибки


 
lipskiy ©   (2004-02-08 02:13) [8]

Вот это работает:

procedure TForm1.Button1Click(Sender: TObject);
var
Lib: HINST;
RasHangUp: TRasHangUp;
i:integer;
begin
try
Lib:=LoadLibrary("rasapi32.dll");
try
RasHangUp := GetProcAddress(Lib, "RasHangUpA");
for i:= 1 to 20000 do RasHangUp(i);
finally
FreeLibrary(Lib);
end;
except
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
4-1079599813
b0bi
2004-03-18 11:50
2004.04.11
Как получить Handle


14-1079693529
Abros
2004-03-19 13:52
2004.04.11
Чем выше температура проца или видухи те больше косяков в играх?


1-1080030038
Анонимщик
2004-03-23 11:20
2004.04.11
StayonTop, TOpenDialog


3-1079002259
СержК
2004-03-11 13:50
2004.04.11
Можно ли устанавливать InterBase на MSSQL server 2003 ?


1-1079447904
Guest_Bob
2004-03-16 17:38
2004.04.11
Звук в ListView при нажатии Alt+Enter