C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблемы при проверке подключения..., ...к Интернету
R@kot
  Отправлено: 19.12.2004, 04:17


Дежурный стрелочник

Группа: Участник
Сообщений: 32



В одном из FAQ'ов нашёл способ проверить, имеется ли в данный момент подключение к Интернету — с помощью функции InternetGetConnectedState:

BOOL InternetGetConnectedState(
OUT LPDWORD lpdwFlags,
IN DWORD dwReserved
);


В описании функции нашёл флаги, которые можно использовать для проверки:
lpdwFlags
Address of a double-word variable where the connection description should be returned. Can be a combination of the following values:
INTERNET_CONNECTION_MODEM Local system uses a modem to connect to the Internet.
INTERNET_CONNECTION_LAN Local system uses a local area network to connect to the Internet.
INTERNET_CONNECTION_PROXY Local system uses a proxy server to connect to the Internet.
INTERNET_CONNECTION_MODEM_BUSY Local system's modem is busy with a non-Internet connection.

Однако, когда пишу что-нибудь вроде:



void __fastcall TForm1::Button1Click(TObject *Sender)
{

if (InternetGetConnectedState(INTERNET_CONNECTION_MODEM, 0)){
ShowMessage("Connected!");
}
else {
ShowMessage("Not Connected!");
}



, Билда ругается и пишет:

[C++ Error] Unit1.cpp(172): E2034 Cannot convert 'int' to 'unsigned long *'

В чём проблема-то? Направьте на путь истинный, кто сможет!
sad.gif
Георгий
Отправлено: 19.12.2004, 16:10


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



LPDWORD = указатель на DWORD

да и в приведённом тобою куске написано
QUOTE
Address of a double-word variable


так что делаем
CODE
DWORD flag = INTERNET_CONNECTION_MODEM;
InternetGetConnectedState(&flag, 0);
Aptem
Отправлено: 19.12.2004, 19:11


Мастер участка

Группа: Участник
Сообщений: 349



Сколько ни искал подобных функций, так и не нашел ни одной, которая бы правильно определяла подключение!
R@kot
Отправлено: 20.12.2004, 01:56


Дежурный стрелочник

Группа: Участник
Сообщений: 32



Георгий, я как увидел сообщение про unsigned long *, то сразу же попытался сделать примерно так же, как показал ты, и вот каков итог:

[Linker Error] Unresolved external 'InternetGetConnectedState' referenced from C:\...\C++ BUILDER 6.0\...\UNIT1.OBJ sad.gif

Чтож на этот раз за беда?
R@kot
Отправлено: 20.12.2004, 02:07


Дежурный стрелочник

Группа: Участник
Сообщений: 32



Нашёл! biggrin.gif Оказывается, перед тем, как написать код (чтобы не ругался линкер), нужно вставить инструкцию:

#pragma comment(lib, "Путь к билдеру\CBuilder6\Lib\Psdk\wininet.lib")

или же просто написать:

#pragma link "wininet.lib" wink.gif

Теперь код Георгия работает. smile.gif Классно! Всем спасибо!

Отредактировано R@kot — 20/12/2004, 03:29
Aptem
Отправлено: 21.12.2004, 07:26


Мастер участка

Группа: Участник
Сообщений: 349



А у меня ничерта не работает.

Если комп в сети и имеет модем, то эта функция неправильно работает.

Мы эту тему еще раньше обсуждали:
ссылка

Вернуться в Вопросы программирования в C++Builder