Вниз
Скачать: 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 вся ветка

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



Память: 0.47 MB
Время: 0.027 c
1-1080201556
IraiZor
2004-03-25 10:59
2004.04.11
Про подсветку в TRichEdit


1-1080149187
Asd
2004-03-24 20:26
2004.04.11
Освободить память после закрытия формы


11-1059639598
Kirill
2003-07-31 12:19
2004.04.11
EditBox


1-1080209431
goliath
2004-03-25 13:10
2004.04.11
Менеджер MP3


3-1078914056
Levan
2004-03-10 13:20
2004.04.11
Pochemu teriaetsia tip ftInteger?




   Наверх