Вверх ↑
Этот топик читают: Гость
Ответов: 1088
Рейтинг: 112
#1: 2008-06-18 20:53:09 ЛС | профиль | цитата
Собственно есть задача: сделать звонилку с отображением статуса соединения с интернетом(ONOFF) как сделать дозвон ясно: ModemDial. А как получить состояние соединения?
Задача очень важна, но самостоятельно её выполнить мне не удалось. Прошу помощь.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2008-06-19 00:02:55 ЛС | профиль | цитата
вот такой способ имеется

#pas
// Заполнение items всеми активными соединениями:

procedure FillConnections();
var
conns: LPRasConn;
ConnCount, bufsize: longint;
i: integer;
status: TRASCONNSTATUS;
begin
bufsize := 0;
// Определение количества активных соединений:
RasEnumConnections(nil, bufsize, ConnCount);
if ConnCount > 0 then
begin
// Выделение памяти:
GetMem(conns, bufsize);
conns^.Size := sizeof(TRasConn);
// Заполнение conns информацией об активных соединениях:
RasEnumConnections(conns, bufsize, ConnCount);
status.dwSize := sizeof(TRasConnStatus);
// Заполнение items названиями соединений:
for i := 0 to ConnCount - 1 do begin
// conns^.szEntryName - имя соединения
// conns^.szDeviceType- тип
// conns^.szDeviceName - имя устройства
RasGetConnectStatus(conns^.hrasconn, status);
// status.rasconnstate - статус
// status.dwError - ошибки
inc(conns);
end;
// Освобождение памяти:
dec(conns, ConnCount);
FreeMem(conns);
end;
end;
карма: 27
0
Ответов: 1088
Рейтинг: 112
#3: 2008-06-19 04:30:53 ЛС | профиль | цитата
Спасибо!!

пока что не работает. Видимо, нужен ras.pas а не RASUnit.pas... через пару часов проверю это...

---------------------

Чет не получается. При вызове этой процедуры программа падает с ошибкой рунтайм 216.
Cхема:
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1ras.zip [1000B] [94]
Администрация
Ответов: 15295
Рейтинг: 1519
#4: 2008-06-19 12:59:03 ЛС | профиль | цитата
расставь _debug() через каждую строчку и посмотри где именно вылетает
карма: 27
1
Голосовали:Sniper36
Ответов: 1088
Рейтинг: 112
#5: 2008-06-19 13:04:29 ЛС | профиль | цитата
На conns^.dwSize := sizeof(TRasConn);
если закоментить GetMem(conns, bufsize); то на RasGetConnectStatus(conns^.hrasconn, status);
если эту строку закоментить то больше ошибок нет
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 2125
Рейтинг: 159
#6: 2008-06-19 16:36:01 ЛС | профиль | цитата
Количество активных соединений нельзя так определять. Нужно просто достаточно большой буфер передавать.
Скорее всего первый RasEnumConnections вернул ошибку, и bufsize остался равным нулю, на что обиделся GetMem.
карма: 1

1
Голосовали:Sniper36
Ответов: 1088
Рейтинг: 112
#7: 2008-06-19 17:13:37 ЛС | профиль | цитата
Избавился от рунтайм. Новая проблема: следующая схема не тянет более 1 активного соединения, если их больше то
conns^.szEntryName
conns^.szDeviceType
status.rasconnstate
выдают полную чушь, status.dwError выдает 1

Решается увеличением буфера. Я увеличил с 512 до 2048 пока все нормально

Спасибо Dilma и tsdima!!
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2008-06-19 17:55:37 ЛС | профиль | цитата
Sniper36, ну если это работает и кроме того является решением задачи, то можно вставить и в дистрибутив. Так что ждем оформленный код.
карма: 27
0
Ответов: 2125
Рейтинг: 159
#9: 2008-06-19 18:02:06 ЛС | профиль | цитата
Sniper36 писал(а):
Я увеличил с 512 до 2048 пока все нормально

Пока пятое соединение не появится
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#10: 2008-06-19 18:06:11 ЛС | профиль | цитата
а почему приведенный способ получения коннектов не работает?

#pas
RasEnumConnections(nil, bufsize, ConnCount);
что содержат bufsize и ConnCount после вызова процедуры?
карма: 27
0
Ответов: 1088
Рейтинг: 112
#11: 2008-06-19 18:19:45 ЛС | профиль | цитата
tsdima писал(а):
Пока пятое соединение не появится

У меня их максимум 4, а активно обычно 0-2
Dilma писал(а):
ну если это работает и кроме того является решением задачи, то можно вставить и в дистрибутив. Так что ждем оформленный код.

Есть только одно НО: данный код может выдать только активные соединения, в своей схеме я использую её совместно с ModemDial(чтобы перечислить все соединения).
Если текущее положение достаточно то могу и оформить...Жду ответ.

Dilma писал(а):
что содержат bufsize и ConnCount после вызова процедуры?


------------ Дoбавленo:


После GetMem(conns, bufsize); bufsize равен 0, далее рунтайм...
далее до RasGetConnectStatus(conns^.hrasconn, status); остается 0
ConnCount содержит 4208501
актуально для любого количестве подключений
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 2125
Рейтинг: 159
#12: 2008-06-19 19:00:42 ЛС | профиль | цитата
Dilma писал(а):
а почему приведенный способ получения коннектов не работает?

А потому-что в MSDN не сказано, что так можно делать
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#13: 2008-06-20 04:51:39 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-04 04:41:32
карма: 0

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)