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 *'
В чём проблема-то? Направьте на путь истинный, кто сможет!
|
|
Георгий |
Отправлено: 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
Чтож на этот раз за беда?
|
|
R@kot |
Отправлено: 20.12.2004, 02:07 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 32
|
Нашёл! Оказывается, перед тем, как написать код (чтобы не ругался линкер), нужно вставить инструкцию:
#pragma comment(lib, "Путь к билдеру\CBuilder6\Lib\Psdk\wininet.lib")
или же просто написать:
#pragma link "wininet.lib"
Теперь код Георгия работает. Классно! Всем спасибо!
Отредактировано R@kot — 20/12/2004, 03:29
|
|
Aptem |
Отправлено: 21.12.2004, 07:26 |
|
Мастер участка
Группа: Участник
Сообщений: 349
|
А у меня ничерта не работает.
Если комп в сети и имеет модем, то эта функция неправильно работает.
Мы эту тему еще раньше обсуждали:
ссылка
|
|