Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.76/101: Рейтинг темы: голосов - 101, средняя оценка - 4.76
Maestro
Маэстро
Вирусоборец
1242 / 366 / 40
Регистрация: 06.09.2009
Сообщений: 793
1

Как проверить наличие соединения с Интернетом\Сетью

30.08.2010, 13:11. Просмотров 20457. Ответов 58
Метки нет (Все метки)

Привет всем. Вопрос простой и в гугле много ссылок и решений, но то что пробовал, не работает. Я знаю эту функцию InternetGetConnectedState, пробовал так, всегда сообщает что Интернет есть, даже при выключеной сети

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
...
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   DWORD flags;
   flags = INTERNET_CONNECTION_MODEM +
           INTERNET_CONNECTION_LAN +
           INTERNET_CONNECTION_PROXY;
 
   if(!InternetGetConnectedState(&flags, 0)) 
      MessageBox(0, "Нет соединения с сетью", "Внимание", MB_OK + MB_ICONWARNING);
   else
      MessageBox(0, "Соединение с сетью установлено", "Внимание", MB_OK + MB_ICONWARNING);
}
//---------------------------------------------------------------------------
А так наоборот, даже при наличии Инета, говорит что соединения нет
C++
1
2
3
4
5
6
7
8
9
10
11
12
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   DWORD state = FLAG_ICC_FORCE_CONNECTION;
   bool OnLine = InternetCheckConnection (NULL, state, 0);
 
   if(!OnLine)
      MessageBox(0, "Нет соединения с сетью", "Внимание", MB_OK + MB_ICONWARNING);
   else
      MessageBox(0, "Соединение с сетью установлено", "Внимание", MB_OK + MB_ICONWARNING);
}
//---------------------------------------------------------------------------
Так не работает тоже
C++
1
2
3
4
5
   bool OnLine = InternetGetConnectedState(NULL,NULL); 
   if(!OnLine)
      MessageBox(0, "Нет соединения с сетью", "Внимание", MB_OK + MB_ICONWARNING);
   else
      MessageBox(0, "Соединение с сетью установлено", "Внимание", MB_OK + MB_ICONWARNING);
Как можно решить этот вопрос? Что вы мне посоветуете?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2010, 13:11
Ответы с готовыми решениями:

Проверка соединения с интернетом
Будет ли исправно работать этот способ на всех компьютерах? На форме компонент Powersock из вкладки...

Как проверить наличие антивируса?
Каким образом можно запретить любой доступ к флешке всем прогам, кроме моей? Как проверить наличие...

Как проверить наличие дочерних ветвей у ветви TreeView
Доброго времени суток, уважаемые! Появился вопрос по TreeView. К сожалению нигде не освящен....

Подгрузить и проверить наличие файла отчёта с расширением *.frf
Добрый день Уважаемые товарищи программисты! Подскажите по такому вопросу. Создаю отчёт в...

Проверка на наличие соединения с БД
Добрый день! Использую DbX, класс TSQLConnection. Каким образом можно определить, что соединение...

58
Maestro
Маэстро
Вирусоборец
1242 / 366 / 40
Регистрация: 06.09.2009
Сообщений: 793
01.09.2010, 16:55  [ТС] 2
Лучший ответ Сообщение было отмечено как решение

Решение

Решение получилось такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Проверяем наличие установленого Интернет-соединения----------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   try{
     IdHTTP1->Get("http://www.virustotal.com");
     MessageBox(0, "Соединение с Интернет есть", "Информация", MB_OK + MB_ICONINFORMATION);
     }
   catch(EIdHTTPProtocolException &se){
      switch(se.ErrorCode){
         case 200:
           break;
         case 303:
           break;  
         case 404: 
           break;
         default:
           break;
        }
      }
   catch(EIdSocketError &se){
      if(se.LastError == 11001)
         MessageBox(0, "Не удалось подключится к удалённому серверу", 0, MB_OK + MB_ICONWARNING);
     }
}
7
Вложения
Тип файла: rar CheckConnect.rar (3.0 Кб, 351 просмотров)
Sasha
4933 / 2397 / 530
Регистрация: 05.06.2008
Сообщений: 7,501
Записей в блоге: 3
01.09.2010, 22:20 3
Чё-то жалуется на вот это &se

[C++ Error] Unit1.cpp(24): E2303 Type name expected
[C++ Error] Unit1.cpp(24): E2377 Catch statement missing )
0
petruchodd
02.09.2010, 07:12
  #4

Не по теме:

Мне тоже интересно как такое сделать :(

0
Maestro
Маэстро
Вирусоборец
1242 / 366 / 40
Регистрация: 06.09.2009
Сообщений: 793
02.09.2010, 13:56  [ТС] 5
Sasha, Могу предположить что версия Indy и самого компонента IdHTTP старая, я собирал проект в Borland Builder C++ 6.0 поставив версию Indy - 10.2.3, потому что с той, которая устанавливалась по умолчанию - 8.0.25 не работала.

Попробуйте создать проект с нуля, вставив компоненты: Button и IdHTTP. В обработчик кнопки вставить код, возможно будет ещё ругаться, что в .h нету таких подключений, добавьте вручную.
Код
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdHTTP.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
Добавлено через 1 минуту
Есть консольный вариант проверки интернет соединения, нашёл когда искал как это сделать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
 
#define ADDR "209.85.229.104"
#define PORT 80
 
#pragma comment(lib, "ws2_32.lib")
 
int main()
{
    WSADATA wsaDATA;
    SOCKET my_socket;
    sockaddr_in server_addr;
    int len_client_sock;
 
    printf("Scanner address: %s!\n", ADDR);
 
    if(WSAStartup(MAKEWORD(2,2), &wsaDATA) != NO_ERROR)
    {
        printf("Library WinSock not load!\n");
        WSACleanup();
        system("PAUSE");
        return 1;
    }
    else
    printf("Library WinSock load!");
 
    my_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    server_addr.sin_family = AF_INET;   
    server_addr.sin_addr.s_addr = inet_addr(ADDR);
    server_addr.sin_port = htons(PORT);
 
    len_client_sock = sizeof(server_addr);
 
        if(connect(my_socket, (sockaddr*)&server_addr, len_client_sock) != SOCKET_ERROR)
            printf("\nInternet YES!\n");
        else
            printf("\nInternet NO!\n");
 
    shutdown(my_socket, SD_BOTH);
    closesocket(my_socket);
    WSACleanup();
 
    system("PAUSE");
 
    return 0;
}
2
petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
Завершенные тесты: 1
16.09.2010, 16:58 6
а как проверить наличие файла на сервере ? ( не подскажите ?
Что бы типа вывести сообщение "файл не найден", а то виолейшн замучал
0
MikeSoft
Эксперт С++
3925 / 1790 / 183
Регистрация: 21.11.2009
Сообщений: 2,540
16.09.2010, 18:03 7
petruchodd, просто обработайте исключение, которое вы получаете с помощью блока try ... catch
0
petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
Завершенные тесты: 1
16.09.2010, 22:23 8
Цитата Сообщение от MikeSoft Посмотреть сообщение
petruchodd, просто обработайте исключение, которое вы получаете с помощью блока try ... catch
дык, обработать это и так понятно. НО как именно это выглядит ((( я не могу нигде найти, я пытался через файлэксист.. но результат был не хороший( ну попробовал, ибо найти ничего не мог)
Выглядит я имею ввиду - на что ссылатся . Если в файлэксист это имя файла(по определнному пути) то как это сделать через интернет ..
мне именно б кусочек кода, не нужно всю проверка, а именно что нужно, что указать для проверки

Добавлено через 5 минут
. точнее имеется ввиду, что я толком не знаю что всунуть в try...catch...ибо работал с ним мало, я больше в java2me с ним сталкивался но там как то более по другому сделано и вообщем не потеме.
Я "не знаю" как сделать простую проверку файла на сайте
0
Maestro
Маэстро
Вирусоборец
1242 / 366 / 40
Регистрация: 06.09.2009
Сообщений: 793
16.09.2010, 23:01  [ТС] 9
petruchodd, Мне друг присылал такой код, сам я не понимаю там многого, но поделюсь. По сути программа скачивает файл архива с программой AVZ - http://z-oleg.com/avz4.zip. Используемые компоненты Button1, Button2, Memo1, ProgressBar1. Там много лишних закомментированых строк, не обращайте внимания, я пытался по всякому сделать, пока рабочий код не прислали...

Файл .h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//---------------------------------------------------------------------------
#ifndef ClientSocket1H
#define ClientSocket1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ScktComp.hpp>
#include <ComCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TMemo *Memo1;
        TButton *Button1;
        TButton *Button2;
        TProgressBar *ProgressBar1;
        void __fastcall ClientRead(TObject *Sender,
          TCustomWinSocket *Socket);
        void __fastcall ClientConnect(TObject *Sender,
          TCustomWinSocket *Socket);
        void __fastcall ClientError(TObject *Sender,
          TCustomWinSocket *Socket, TErrorEvent ErrorEvent,
          int &ErrorCode);
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
   AnsiString Name;
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Файл .cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "ClientSocket1.h"
#include <WinInet.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
struct DOWNLOAD_DATA
{
   char Url[1024]; //ссылка на файл
   BOOL bFlag; // если TRUE, то осуществляется докачка
};
 
//закачку я осуществлял в отдельном потоке.
DWORD WINAPI DownloadThread(LPVOID lpParam)
{
   DOWNLOAD_DATA data = *(DOWNLOAD_DATA *)lpParam;
   HINTERNET    hInetSession;
   HINTERNET    hInetFile;
   HANDLE       hFile;
   OVERLAPPED   ovlp;
   DWORD        dwOffset = 0;
   DWORD        dwRead;
   TCHAR        ReadBuf[4*1024];
 
   hInetSession = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)", PRE_CONFIG_INTERNET_ACCESS, NULL, NULL, 0); //Возвращает хэндл сессии
   if(hInetSession == NULL){ //тут всё понятно
      return -1;
     }
 
   hInetFile = InternetOpenUrl(hInetSession, data.Url, NULL, 0, 0, NULL); //по сути открываем файл
   if(hInetFile == NULL){ //снова проверяем
      return -1;
     }
 
//---------
// открываем запрос
    LPCWSTR rgszAcceptTypes[2] = {pstLRF_Params->szDocumentType,NULL};
    hRequest = ::HttpOpenRequest(hSessiont, L"GET", szUrlPath, L"HTTP/1.1", NULL, rgszAcceptTypes, INTERNET_FLAG_KEEP_CONNECTION, 1);
       if(hRequest == NULL)  throw L"HttpOpenRequest Error";
 
 // посылаем запрос
    fResult= ::HttpSendRequest(hRequest, NULL,0, NULL,0);
       if(!fResult) throw L"HttpSendRequest Error";
 
    // получаем  информацию о размере данных
    fResult = HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH | HTTP_QUERY_FLAG_NUMBER, &dwFileLength, &dwDwordLength, NULL);
    if(!fResult && (GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND))
       dwFileLength = (DWORD)pstLRF_Params->uFileLength;
//---------
 
   hFile = CreateFile("AVZ.rar"/*data.Url*/, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //открываем файл для сохранения
   if(hFile == INVALID_HANDLE_VALUE){ //проверяем
      InternetCloseHandle(hInetSession); //закрываем сессию
      InternetCloseHandle(hInetFile); //закрываем файл
      return -1;
     }
 
   if(data.bFlag) //осуществляется докачка
      InternetSetFilePointer(hInetFile, GetFileSize(hFile, NULL), NULL, FILE_BEGIN, 0); //сдвигаем чтение на GetFileSize бит
 
   Form1->ProgressBar1->Position = 0;
   Form1->ProgressBar1->Max = 100;//GetFileSize(hFile, NULL);
   Form1->Memo1->Lines->Add(GetFileSize(hFile, NULL));
 
   //начинаем скачку
   do{
      InternetReadFile(hInetFile, ReadBuf, sizeof(ReadBuf), &dwRead); //читаем в буффер
      if(dwRead >= 0){ //если считали
         ovlp.hEvent     = NULL;
     ovlp.OffsetHigh = NULL;
     ovlp.Offset     = GetFileSize(hFile, NULL);
         WriteFile(hFile, ReadBuf, dwRead, NULL, &ovlp); //пишем в наш файл
     dwOffset += dwRead;
    }
      else{ //не считали, пытаемся повторить скачивание
     InternetCloseHandle(hInetSession); //закрываем сессию
     InternetCloseHandle(hInetFile); //закрываем удалённый файл
         hInetSession = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)", PRE_CONFIG_INTERNET_ACCESS, NULL, NULL, 0);//пытаемся повторить скачку
     if(hInetSession == NULL){
        CloseHandle(hFile);
        return -1;
       }
 
     hInetFile = InternetOpenUrl(hInetSession, data.Url, NULL, 0, 0, NULL);
     if(hInetFile == NULL){
        CloseHandle(hFile);
        InternetCloseHandle(hInetSession);
        return -1;
       }
 
     InternetSetFilePointer(hInetFile, dwOffset, NULL, FILE_BEGIN, NULL);
        }
            Form1->ProgressBar1->StepIt();
     }
   while(dwRead);
 
   //закрываем всё лишнее
   CloseHandle(hFile);
   InternetCloseHandle(hInetSession);
   InternetCloseHandle(hInetFile);
   return 1;
}
//----------------------------------------------------------------------
/*TMemoryStream *MS = new TMemoryStream;  // создаем поток под принимаемый файл
void Write(AnsiString Text);          // ф-я записи получаемой информации в поток
int Size;                              // размер передаваемого файла
bool Receive;                         // передаем ли мы на данный момент файл
AnsiString FileName;*/
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
/*void Write(AnsiString Text)
{
   if(MS->Size < Size){  // если мы еще принимаем файл и размер потока меньше размера файла
      MS->Write(Text.c_str(), Text.Length());         // записываем в поток
      Form1->Memo1->Lines->Add("Принимаем данные..."); // пишем лог
     }
   if(MS->Size == Size){ // если файл принят и размер потока соответствует размеру файла
      Receive = false ;                         // останавливаем режим передачи
      MS->Position = 0 ;                        // переводим каретку потока в начало
      Form1->Client->Socket->SendText("end"); // пишем серверу, что мы приняли файл
      CreateDir("Downloads");                 // создаем папку для сохраненных файлов
      MS->SaveToFile("Downloads\\"+FileName); // сохраняем туда наш файл
      MS->Clear();                             // освобождаем поток
      Size = 0;
      Form1->Memo1->Lines->Add("Файл принят !"); // пишем в лог что файл принят
     }
}                */
//-------------------------------------------------------------------------
void __fastcall TForm1::ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
/*   AnsiString Rtext ;  // текст, который посылает сервер
   Rtext = Client->Socket->ReceiveText() ;
   if(Receive == true){ // если мы в режиме передачи файла, то
      Write(Rtext); // записываем его в поток
     }
   else{ // если нет , то
      Memo1->Lines->Add( "Приняли текст :" + Rtext);     // пишем в лог все что принимаем от сервера
      if(Rtext.SubString( 0,Rtext.Pos("#")-1) == "file"){ // Если это строка типа
      // file#filename#filesize#, то начинаем парсерить полученную информацию :
     Rtext.Delete( 1 , Rtext.Pos( "#" ) ) ;            // удаляем слово file
     Name = Rtext.SubString( 0 , Rtext.Pos( "#" ) -1 );// Определяем имя файла
     FileName = Name.SubString( Name.LastDelimiter( "\\" ) + 1 , Name.Length() );
     // Выделяем чистое имя файла , например с c:\\test.txt , берем test.txt
     Rtext.Delete( 1 , Rtext.Pos( "#" ) );                               // Удаляем последний разделитель
     Size = StrToInt( Rtext.SubString( 0 , Rtext.Pos( "#" ) - 1) ) ;     // Определяем размер файла
     Rtext.Delete( 1 , Rtext.Pos( "#" ) );                               // Удаляем последний разделитель
     Memo1->Lines->Add( "Размер файла: " + IntToStr( Size ) + " байт" ); // Выводим размер файла в лог
     Memo1->Lines->Add( "Имя файла: " + Name );                          // Выводим имя файла в лог
     Receive = true;
     // Переводим сервер в режим приёма файла
    }
     }                              */
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
//   Memo1->Lines->Add("Вы присоеденились;");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClientError(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
//   ErrorCode = 0;
  // ShowMessage("Client Error");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   HANDLE hThread;
   DOWNLOAD_DATA data;
   
   strcpy(data.Url, "http://z-oleg.com/avz4.zip");
   data.bFlag = false;
   hThread = CreateThread(NULL, 0, DownloadThread, &data, 0, NULL);
   if(hThread == INVALID_HANDLE_VALUE){
      ShowMessage("Error. Can't create thread!");
      return;
     }
   CloseHandle(hThread);
}
//---------------------------------------------------------------------------
1
petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
Завершенные тесты: 1
16.09.2010, 23:08 10
к сожилению это сильно хитро сделаный код и довольно таки много кода. Я уверен что есть проще способ. Использовать его я не могу, ибо ничего в нем не понимаю ( 6-7 строчек остальное заоблочное)
я использую компоненту IdHTTP1 c вкладки IndyClients Мне говорили, что там можна сделать, но я не могу нигде не вычитать, не найти ответ на свой вопрос, а вообще спасибо за попытку помочь. Но я физически не смогу всунуть этот код в свою программу.
p.s Builder 6
0
MikeSoft
Эксперт С++
3925 / 1790 / 183
Регистрация: 21.11.2009
Сообщений: 2,540
16.09.2010, 23:50 11
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от petruchodd Посмотреть сообщение
точнее имеется ввиду, что я толком не знаю что всунуть в try...catch...ибо работал с ним мало, я больше в java2me с ним сталкивался но там как то более по другому сделано и вообщем не потеме.
Обработка исключений везде одинаковая.

Когда вы получаете от IDE сообщение, рапортующее об исключительной ситуации, обычно, указывается класс исключения. Его-то нам и нужно получить.

Итак, пытаемся отправить запрос на несуществующий файл. Будет сгенерировано вот такое сообщение:
Project Project1.exe raised exception class EIdHTTPProtocolException with message 'HTTP/1.1 404 Not Found'.
Имя класса получено. Исключения такого класса и будем обрабатывать:
C++
1
2
3
4
5
6
7
8
try {
  String Text = HTTP->Get("http://msdn.at.ua/1.txt");
  ShowMessage(Text);
} catch (EIdHTTPProtocolException &e) {
  ShowMessage(e.Message);
} catch (...) {
  ShowMessage("Exception");
}
Как видите, всё просто.
3
petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
Завершенные тесты: 1
17.09.2010, 16:02 12

Не по теме:

спасибо спасибо спасибо спасибо спасибо .....



Добавлено через 12 часов 0 минут
MikeSoft,а не подскажешь ... оно случайно "проверяя на наличие файла на сервере" не тянет его с собой ? Тоесть - не качает его случайно ? Просто я вот наконецто добрался ... и делая проверку, я получаю задержку (форма не активна) секунд на 6-9 ( если закачать файл, то примерно стоко же времени уйдет )
0
MikeSoft
Эксперт С++
3925 / 1790 / 183
Регистрация: 21.11.2009
Сообщений: 2,540
17.09.2010, 16:19 13
Цитата Сообщение от petruchodd Посмотреть сообщение
Тоесть - не качает его случайно
Качает, конечно.

Если вам не нужна закачка, то нужно обрывать соединение, как только будет начата работа.
Как это сделать я описывал здесь: Как отправить на сервер гет или пост сообщения, и обойтись без закачки ответа
1
petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 700
Завершенные тесты: 1
17.09.2010, 17:18 14
а ещо, не подскажите такую фигню event onWork .. там был код как бы от старой компоненты инди, а щас новая стоит. И вроде как не могу ни удалить, ни выполнить код в этой области. Два раза на эвенте = меседж бокс с крестиком(красным).При компиляции если удалить, то будет ошибка:

C++
1
2
3
4
5
void __fastcall TForm4::HTTP1Work(TObject *Sender, TWorkMode AWorkMode,
      const int AWorkCount)
{
 
}
и ошибка
C++
1
[Linker Error] Unresolved external '__fastcall TForm4::HTTP1Work(System::TObject *, Idcomponent::TWorkMode, const int)' referenced from D:\INSTALL FOLDER\INSTALL COMPILIATORS\ARCH\UNIT4.OBJ
Собсно я с таким редко сталкивался, кода уже много, переделывать не получится. Как убрать эту ошибку и заставить выше выполняемый код работать? ( либо заменить новым эвентом - лучше это ) )


з.ы. пишу тут так как в основом тут этот компонент почти везде описуется ) надеюсь ругать не будете,что тема висит сверху.
0
MikeSoft
Эксперт С++
3925 / 1790 / 183
Регистрация: 21.11.2009
Сообщений: 2,540
17.09.2010, 17:28 15
petruchodd, в заголовочном файле (*.h) удалите прототип этой функции.
1
Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
22.02.2012, 16:25 16
Ну и в итоге. Как проверить наличие соединения с нетом? Какой в итоге код? Помогите пожалуйста!
не по теме Только не надо злорадствовать,,))

Добавлено через 12 минут
Цитата Сообщение от Sasha Посмотреть сообщение
Чё-то жалуется на вот это &se
Тоже самое(((

Цитата Сообщение от Maestro Посмотреть сообщение
Попробуйте создать проект с нуля, вставив компоненты: Button и IdHTTP. В обработчик кнопки вставить код, возможно будет ещё ругаться, что в .h нету таких подключений, добавьте вручную.
Не помогает.
0
__bool
287 / 228 / 27
Регистрация: 13.06.2010
Сообщений: 744
23.02.2012, 15:02 17
Попробовал все варианты, никаких "жалований" со стороны компилятора не наблюдал

Ни один из вариант не считаю приемлемым.
1) IdHTTP->Get, try-catch - очень долго проверяет(если инета нет, то около 30 секунд(даже если TimeOut=1000))
2) Консольный вариант говорит что соединения нет, даже если оно есть (прокси)

Мои мысли по поводу решения:
Нужно проверять соединение в соответствии с системными настройками подключения(Сервис -> Свойства обозревателя -> Подключение)

Иначе наличие сети не проверить имхо
0
Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
23.02.2012, 16:44 18
Цитата Сообщение от __bool Посмотреть сообщение
Нужно проверять соединение в соответствии с системными настройками подключения(Сервис -> Свойства обозревателя -> Подключение)
У меня тоже были такие мысли, только вот как это сделать?? У кого нибудь есть мысли????
0
Samrisbe
1354 / 724 / 66
Регистрация: 28.01.2011
Сообщений: 2,010
23.02.2012, 16:50 19
Для работы Вам необходимо импортировать функцию InetIsOffline из URL.DLL:
C++
1
function InetIsOffline(Flag: Integer): Boolean; stdcall; external 'URL.DLL';
а затем поместить в программу простой вызов функции для проверки статуса соединения:
C++
1
2
3
4
if InetIsOffline(0) then 
   ShowMessage('This computer is not connected to Internet!') 
else 
   ShowMessage(You are connected to Internet!');
Эта функция возвращает TRUE если соединение с интернетов отсутствует, или FALSE если соединение установлено.
техподдержка и сопровождение не предоставляется.(автор LK)
0
Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431
23.02.2012, 17:11 20
А как это сделать ведь это нужно не только мне!! Вот подобный вопрос http://www.cyberforum.ru/post1736810.html
0
23.02.2012, 17:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2012, 17:11

Как проверить наличие таблицы в БД с заданным названием?
Добрый день ребята! Подскажите как можно проверить наличие таблицы с заданным названием в БД...

Как проверить наличие уже существующих данных в базе?
доброе время суток! помогите пожалуйста! Есть таблица, надо сделать так, чтобы если я ввожу данные,...

Проверить наличие записей в БД
Уважаемые программисты, не могу сообразить как сделать. если записей нет, то он выводит &quot;В БД...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.