Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизРазрыв соединения с инетом Найти похожие ветки
← →
@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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.044 c