Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477

Получение значений из внешних источников по ethernet

20.03.2012, 17:34. Показов 1912. Ответов 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
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
#include <winsock2.h>
#include <IPHlpApi.h>
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
 
#pragma warning( disable : 4996 ) // отключаем проверку переполнения буфера
 
/* A global variable */
SOCKET m_sock;
FILE* geclog;
 
void write_log(char* text,char* file_name,int string_number) {
  fprintf(geclog,"%s in file %s on line %d\n",text,file_name,string_number); 
  fflush(geclog); //очищает и выводит в файл.
}
  
 
int init_program(){
  errno_t err; //переменная кода ошибки
  struct tm   *newTime;
  time_t      szClock;
  // Get time in seconds
  time( &szClock );
  // Convert time to struct tm form 
  newTime = localtime( &szClock );
 
  if ((err=fopen_s(&geclog,"gec.log","wt")) != 0) {return 1;}
  fprintf(geclog,"Log starting at %s",asctime( newTime ));
  fprintf(geclog,"_ec library compilation time - %s %s \n",__DATE__,__TIME__);
  return 0; 
}
 
int close_program(){
  if(m_sock != 0) {
     if ( closesocket( m_sock) ) {write_log("ERROR",__FILE__,__LINE__);} 
     if ( WSACleanup() ) {write_log("ERROR",__FILE__,__LINE__);}//освобождаем ресурсы, которые были нужны, для работы с сокетами
  }
 
  fprintf(geclog,"Log end\n");
  fclose(geclog);// закрываем поток
 
  return 0;
}
 
int init_instrument(){
  WSADATA m_wsaData; //переменная для реализации сокетов
  sockaddr_in my_addr, c_addr; //структуры для работы с IPv4
  int i, num;
  char nm1[16];
  unsigned char bf[128];
 
  ULONG BufLen;
  PIP_ADAPTER_INFO pAdapterInfo;
  PIP_ADAPTER_INFO pAdapter = NULL;
  MIB_IPNETROW ArpEntry;
  PMIB_IPNETROW pArpEntry;
  DWORD dwRetVal;
 
  i = WSAStartup(MAKEWORD(2, 2), &m_wsaData); //инициализируем винсок библиотеку
  if (i) {write_log("ERROR",__FILE__,__LINE__); return 1;} //если иницализация прошла неуспешно, тогда i= код ошибки
  BufLen = sizeof(IP_ADAPTER_INFO); pAdapterInfo = (IP_ADAPTER_INFO *)malloc(BufLen);
  // Make an initial call to GetAdaptersInfo to get the necessary size into the ulOutBufLen variable
  if ( GetAdaptersInfo(pAdapterInfo, &BufLen) == ERROR_BUFFER_OVERFLOW ) { free(pAdapterInfo); pAdapterInfo = (IP_ADAPTER_INFO *)malloc(BufLen); }/*если нехватило буфера, тогда освобождаем переменную размера буфера и заполняем её нужным значением*/
  strcpy_s(nm1,16,"222.222.222.222"); pArpEntry = &ArpEntry;
  if ( GetAdaptersInfo(pAdapterInfo, &BufLen) == NO_ERROR ) {
      pAdapter = pAdapterInfo;
      if ( pAdapter ) { 
         pArpEntry->dwIndex = pAdapter->Index; pArpEntry->dwPhysAddrLen = 6;
         pArpEntry->bPhysAddr[0] = 0x00; pArpEntry->bPhysAddr[1] = 0x05; pArpEntry->bPhysAddr[2] = 0x1c;
         pArpEntry->bPhysAddr[3] = 0x04; pArpEntry->bPhysAddr[4] = 0xba; pArpEntry->bPhysAddr[5] = 0x10;
         pArpEntry->dwAddr = inet_addr(nm1); pArpEntry->dwType = 4;
         dwRetVal = CreateIpNetEntry(pArpEntry); //создаем запись в ARP на компе
         if ( dwRetVal != NO_ERROR && dwRetVal != 5010 ) {write_log("ERROR",__FILE__,__LINE__); return 1; }
         pAdapter = pAdapter->Next;
      }
   }
  else {write_log("ERROR",__FILE__,__LINE__); return 1;}
  free(pAdapterInfo);
 
  m_sock = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL , 0, 0); 
  if ( m_sock == INVALID_SOCKET ) {write_log("ERROR",__FILE__,__LINE__); return 1;}
 
  my_addr.sin_family = AF_INET;
  my_addr.sin_port = htons(0x1f10);
  my_addr.sin_addr.S_un.S_addr = inet_addr("222.222.222.200");
  memset(&(my_addr.sin_zero), '\0', 8);
 
  if ( bind(m_sock, (const struct sockaddr *)&my_addr, sizeof(sockaddr_in)) ) { 
     closesocket( m_sock); WSACleanup(); write_log("ERROR",__FILE__,__LINE__); return 1; 
  }
    
  c_addr.sin_family = AF_INET;
  c_addr.sin_port = htons(0x1f10);
  c_addr.sin_addr.S_un.S_addr = inet_addr("222.222.222.222");
  memset(&(c_addr.sin_zero), '\0', 8);
 
  if ( connect(m_sock, (const struct sockaddr *)&c_addr, sizeof(sockaddr_in)) ) { 
     closesocket( m_sock); WSACleanup(); write_log("ERROR",__FILE__,__LINE__); return 1;}
 
  bf[0] = 0x00; bf[1] = 0x00;
  num = send(m_sock, (char *)bf, 2, 0); 
  if ( num == SOCKET_ERROR ) {write_log("ERROR",__FILE__,__LINE__); return 1;}
                                            
  fd_set soc_insp;
  timeval insp_time;
 
  insp_time.tv_sec = 0; insp_time.tv_usec = 33333; soc_insp.fd_count = 1; soc_insp.fd_array[0] = m_sock;
  if (select(0, &soc_insp, NULL, NULL, &insp_time) != 1) {write_log("ERROR",__FILE__,__LINE__); return 2;}//если количество дескриптеров сокетов больше 1, то записываем в лог
  num = recv(m_sock, (char *)bf, 32, 0); if ( num == SOCKET_ERROR ) {write_log("ERROR",__FILE__,__LINE__); return 2;}
  if(strcmp((const char*)bf,"EC_INSTRUMENT") != 0) {write_log("ERROR",__FILE__,__LINE__); return 2;}                                                  
 
 
  return 0;
}
сейчас файл в формате cpp, я его думаю перевести в h и подключить как заголовок.

Теперь собственно - что нужно: предположим, на форме есть label(textBox) или просто глобальная переменная внутри блока form1.h, в неё нужно получить данные приходящие извне, я так понимаю, нужно сделать что-то типа select(0, &soc_insp, NULL, NULL, &insp_time), потом забрать данные через recv(m_sock, (char *)bf, 1500, 0). Подскажите пожалуйста, куда и как мне чего надо заносить? уже паника началась. Просто не знаю куда это вставлять всё...

MSVisualStudio 2008

Добавлено через 2 часа 14 минут
Просто беда в том, что при #include "ec.h" ("ec.h" название файла, код которого указан выше), выводится большая гора
ошибок
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A00007A) "extern "C" int __stdcall recv(unsigned int,char *,int,int)" (?recv@@$$J216YGHIPADHH@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A00007B) "extern "C" int __stdcall select(int,struct fd_set *,struct fd_set *,struct fd_set *,struct timeval const *)" (?select@@$$J220YGHHPAUfd_set@@00PBUtime val@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A00007C) "extern "C" int __stdcall send(unsigned int,char const *,int,int)" (?send@@$$J216YGHIPBDHH@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A00007D) "extern "C" int __stdcall connect(unsigned int,struct sockaddr const *,int)" (?connect@@$$J212YGHIPBUsockaddr@@H@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A00007E) "extern "C" int __stdcall bind(unsigned int,struct sockaddr const *,int)" (?bind@@$$J212YGHIPBUsockaddr@@H@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A00007F) "extern "C" unsigned short __stdcall htons(unsigned short)" (?htons@@$$J14YGGG@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000080) "extern "C" unsigned int __stdcall WSASocketW(int,int,int,struct _WSAPROTOCOL_INFOW *,unsigned int,unsigned long)" (?WSASocketW@@$$J224YGIHHHPAU_WSAPROTOCO L_INFOW@@IK@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000081) "extern "C" unsigned long __stdcall CreateIpNetEntry(struct _MIB_IPNETROW_LH *)" (?CreateIpNetEntry@@$$J14YGKPAU_MIB_IPNE TROW_LH@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000082) "extern "C" unsigned long __stdcall inet_addr(char const *)" (?inet_addr@@$$J14YGKPBD@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000083) "extern "C" unsigned long __stdcall GetAdaptersInfo(struct _IP_ADAPTER_INFO *,unsigned long *)" (?GetAdaptersInfo@@$$J18YGKPAU_IP_ADAPTE R_INFO@@PAK@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000084) "extern "C" int __stdcall WSAStartup(unsigned short,struct WSAData *)" (?WSAStartup@@$$J18YGHGPAUWSAData@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000086) "extern "C" int __stdcall WSACleanup(void)" (?WSACleanup@@$$J10YGHXZ) в функции "int __clrcall close_program(void)" (?close_program@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000087) "extern "C" int __stdcall closesocket(unsigned int)" (?closesocket@@$$J14YGHI@Z) в функции "int __clrcall close_program(void)" (?close_program@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall WSACleanup(void)" (?WSACleanup@@$$J10YGHXZ) в функции "int __clrcall close_program(void)" (?close_program@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall closesocket(unsigned int)" (?closesocket@@$$J14YGHI@Z) в функции "int __clrcall close_program(void)" (?close_program@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall recv(unsigned int,char *,int,int)" (?recv@@$$J216YGHIPADHH@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall select(int,struct fd_set *,struct fd_set *,struct fd_set *,struct timeval const *)" (?select@@$$J220YGHHPAUfd_set@@00PBUtime val@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall send(unsigned int,char const *,int,int)" (?send@@$$J216YGHIPBDHH@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall connect(unsigned int,struct sockaddr const *,int)" (?connect@@$$J212YGHIPBUsockaddr@@H@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall bind(unsigned int,struct sockaddr const *,int)" (?bind@@$$J212YGHIPBUsockaddr@@H@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned short __stdcall htons(unsigned short)" (?htons@@$$J14YGGG@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned int __stdcall WSASocketW(int,int,int,struct _WSAPROTOCOL_INFOW *,unsigned int,unsigned long)" (?WSASocketW@@$$J224YGIHHHPAU_WSAPROTOCO L_INFOW@@IK@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned long __stdcall CreateIpNetEntry(struct _MIB_IPNETROW_LH *)" (?CreateIpNetEntry@@$$J14YGKPAU_MIB_IPNE TROW_LH@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned long __stdcall inet_addr(char const *)" (?inet_addr@@$$J14YGKPBD@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned long __stdcall GetAdaptersInfo(struct _IP_ADAPTER_INFO *,unsigned long *)" (?GetAdaptersInfo@@$$J18YGKPAU_IP_ADAPTE R_INFO@@PAK@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" int __stdcall WSAStartup(unsigned short,struct WSAData *)" (?WSAStartup@@$$J18YGHGPAUWSAData@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>D:\VC\1\ZedGraphTestLine\Debug\ZedGrap hTestLine.exe : fatal error LNK1120: 26 неразрешенных внешних элементов


Добавлено через 9 минут
Так, подключил
C++
1
#pragma comment(lib, "Ws2_32.lib")
ошибок
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000081) "extern "C" unsigned long __stdcall CreateIpNetEntry(struct _MIB_IPNETROW_LH *)" (?CreateIpNetEntry@@$$J14YGKPAU_MIB_IPNE TROW_LH@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2028: ссылка на неразрешенную лексему (0A000083) "extern "C" unsigned long __stdcall GetAdaptersInfo(struct _IP_ADAPTER_INFO *,unsigned long *)" (?GetAdaptersInfo@@$$J18YGKPAU_IP_ADAPTE R_INFO@@PAK@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned long __stdcall CreateIpNetEntry(struct _MIB_IPNETROW_LH *)" (?CreateIpNetEntry@@$$J14YGKPAU_MIB_IPNE TROW_LH@@@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
1>ZedGraphTestLine.obj : error LNK2019: ссылка на неразрешенный внешний символ "extern "C" unsigned long __stdcall GetAdaptersInfo(struct _IP_ADAPTER_INFO *,unsigned long *)" (?GetAdaptersInfo@@$$J18YGKPAU_IP_ADAPTE R_INFO@@PAK@Z) в функции "int __clrcall init_instrument(void)" (?init_instrument@@$$FYMHXZ)
стало меньше
чего еще нужно подключить?

Добавлено через 47 минут
Подключил iphlpapi.lib, ошибок нету. Как забрать данные?

Добавлено через 1 час 55 минут
Взял за основу следующий код:
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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include <winsock2.h>
#include <IPHlpApi.h>
#include <stdlib.h>
#include <stdio.h>
#include <tchar.h>
#include <process.h>
 
#include <math.h>
 
#define DllName  "Osc_DLL.dll"
 
 
int (__cdecl  * ScopeAfterOpenLib)(int Prm);
int (__cdecl  * ScopeCreate)   (int Prm ,char  *P_IniName, char *P_IniSuffix);
int (__cdecl  * ScopeDestroy)  (int Prm);
int (__cdecl  * ScopeShow)      (int Prm);
int (__cdecl  * ScopeHide)       (int Prm);
int (__cdecl  * ScopeShowNext)    (int Prm, double *PrmD );
int (__cdecl  * ScopeQuickUpDate)  (int Prm);
int (__cdecl * ScopeSetCaption) (int Prm, char * P_ZeroTermStr);
 
HINSTANCE DllInst;
char *pEmpty = "";
int Scopes[7];
HANDLE oscill_hThread;
unsigned oscill_threadID;
volatile LONG oscill_end = FALSE;
unsigned __stdcall oscill_data_func( void* pArguments );
 
double x_med, y_med;
double x_med_1, y_med_1;
double x_med_2, y_med_2;
double x_med_3, y_med_3;
 
extern SOCKET m_sock;
extern void write_log(char* text,char* file_name,int string_number);
 
int oscill() {
   InterlockedExchange(&oscill_end,TRUE);
   oscill_hThread = (HANDLE)_beginthreadex( NULL, 0, &oscill_data_func, NULL, 0, &oscill_threadID );
   if (WaitForSingleObject( oscill_hThread, 100 ) != WAIT_TIMEOUT) { return 1;}  // For error control in tread
   return 0;
}
int oscill_stop() {
   InterlockedExchange(&oscill_end,FALSE);
   WaitForSingleObject( oscill_hThread, INFINITE ); 
   CloseHandle( oscill_hThread );
   return 0;
}
 
unsigned __stdcall oscill_data_func( void* pArguments ) {
  short bf[1024];
  short * pbf;
  int num;
  fd_set soc_insp;
  timeval insp_time;
  double oscill_dat[3];
  double oscill_dat_1[3];
  double oscill_dat_2[3];
  double oscill_dat_3[3];
  unsigned short send_buf[2];
  double x_m = 0.0;
  double y_m = 0.0;
  double x_m_1 = 0.0;
  double y_m_1 = 0.0;
  double x_m_2 = 0.0;
  double y_m_2 = 0.0;
  double x_m_3 = 0.0;
  double y_m_3 = 0.0;
 
   ScopeAfterOpenLib = NULL;
   DllInst = ::LoadLibraryA((char *)DllName);
   if (DllInst==NULL)   {write_log("LoadLibrary Osc_DLL ERROR",__FILE__,__LINE__); return 1;}
   ScopeAfterOpenLib  = (int (__cdecl  * )(int))GetProcAddress(DllInst, "AtOpenLib");
   if (ScopeAfterOpenLib == NULL)   {
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
   ScopeAfterOpenLib (0);
   ScopeShowNext  = (int (__cdecl  * )(int, double *))GetProcAddress(DllInst, "ShowNext");
   if (ScopeShowNext == NULL)   {   
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
   ScopeCreate  = (int (__cdecl  * )(int, char *, char *))GetProcAddress(DllInst, "ScopeCreate");
   if (ScopeCreate == NULL)  {   
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
   ScopeDestroy  = (int (__cdecl  * )(int))GetProcAddress(DllInst, "ScopeDestroy");
   if (ScopeDestroy == NULL)   {  
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
   ScopeShow  = (int (__cdecl  * )(int))GetProcAddress(DllInst, "ScopeShow");
   if (ScopeShow == NULL)   {   
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
   ScopeHide  = (int (__cdecl  * )(int))GetProcAddress(DllInst, "ScopeHide");
   if (ScopeHide == NULL)   {   
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
   ScopeQuickUpDate  = (int (__cdecl  * )(int))GetProcAddress(DllInst, "QuickUpDate");
   if (ScopeQuickUpDate == NULL)  {  
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
   ScopeSetCaption  = (int (__cdecl  * )(int, char *))GetProcAddress(DllInst, "ScopeSetCaption");
   if (ScopeSetCaption == NULL)  {  
       write_log("GetProcAddress Osc_DLL ERROR",__FILE__,__LINE__); 
       FreeLibrary(DllInst);
       return 1;
   }
     
 
   Scopes[1] = ScopeCreate(0, pEmpty, pEmpty);
   ScopeSetCaption(Scopes[1], "EC instrument oscilloscope   Channel 0");
   ScopeShow(Scopes[1]);
   Scopes[2] = ScopeCreate(0, pEmpty, pEmpty);
   ScopeSetCaption(Scopes[2], "EC instrument oscilloscope   Channel 1");
   ScopeShow(Scopes[2]);
 
   Scopes[3] = ScopeCreate(0, pEmpty, pEmpty);
   ScopeSetCaption(Scopes[3], "EC instrument oscilloscope   Channel 2");
   ScopeShow(Scopes[3]);
   Scopes[4] = ScopeCreate(0, pEmpty, pEmpty);
   ScopeSetCaption(Scopes[4], "EC instrument oscilloscope   Channel 3");
   ScopeShow(Scopes[4]);
  
  insp_time.tv_sec = 0; insp_time.tv_usec = 10000*2; soc_insp.fd_count = 1; soc_insp.fd_array[0] = m_sock;
  
  send_buf[0] = 0x0700;     // dsp scanning
  send_buf[1] = 0x0000;
  num = send(m_sock, (char *)send_buf, sizeof(send_buf), 0); 
  if ( num == SOCKET_ERROR ) {write_log("ERROR",__FILE__,__LINE__); return 1;}
 
  while(InterlockedExchange(&oscill_end,TRUE)==TRUE) {
      if (select(0, &soc_insp, NULL, NULL, &insp_time) == 1) {
        num = recv(m_sock, (char *)bf, 1500, 0); 
        if ( num == SOCKET_ERROR ) {write_log("ERROR",__FILE__,__LINE__);}
        else { 
           pbf = bf+16;
           for(int i = 0; i<64; ++i) {
              oscill_dat[0] = (double)(*pbf);
              x_m += oscill_dat[0];
              oscill_dat[1] = (double)(*(pbf+1));
              y_m += oscill_dat[1];
              
              pbf +=  2;
 
              oscill_dat_1[0] = (double)(*pbf);
              x_m_1 += oscill_dat_1[0];
              oscill_dat_1[1] = (double)(*(pbf+1));
              y_m_1 += oscill_dat_1[1];
              
              pbf +=  2;
              ScopeShowNext( Scopes[1], oscill_dat ); 
              ScopeShowNext( Scopes[2], oscill_dat_1 ); 
           }
           x_med = x_m / 64.0;
           x_m = 0.0;
           y_med = y_m / 64.0;
           y_m = 0.0;
 
           x_med_1 = x_m_1 / 64.0;
           x_m_1 = 0.0;
           y_med_1 = y_m_1 / 64.0;
           y_m_1 = 0.0;
 
           for(int i = 0; i<64; ++i) {
              oscill_dat_2[0] = (double)(*pbf);
              x_m_2 += oscill_dat_2[0];
              oscill_dat_2[1] = (double)(*(pbf+1));
              y_m_2 += oscill_dat_2[1];
              
              pbf +=  2;
 
              oscill_dat_3[0] = (double)(*pbf);
              x_m_3 += oscill_dat_3[0];
              oscill_dat_3[1] = (double)(*(pbf+1));
              y_m_3 += oscill_dat_3[1];
              
              pbf +=  2;
              ScopeShowNext( Scopes[3], oscill_dat_2 ); 
              ScopeShowNext( Scopes[4], oscill_dat_3 ); 
           }
           x_med_2 = x_m_2 / 64.0;
           x_m_2 = 0.0;
           y_med_2 = y_m_2 / 64.0;
           y_m_2 = 0.0;
 
           x_med_3 = x_m_3 / 64.0;
           x_m_3 = 0.0;
           y_med_3 = y_m_3 / 64.0;
           y_m_3 = 0.0;
 
        }
     }
  } 
  send_buf[0] = 0x0701;     // dsp scanning stop
  send_buf[1] = 0x0001;
  num = send(m_sock, (char *)send_buf, sizeof(send_buf), 0); 
  if ( num == SOCKET_ERROR ) {write_log("ERROR",__FILE__,__LINE__);}
 
  if(ScopeDestroy(Scopes[1]) != Scopes[1]) printf("ScopeDestroy error\n");
  FreeLibrary(DllInst); 
  return 0;
}
чтоб забрать данные, попробовал создать новую кнопку и в её обработчик поставить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
extern SOCKET m_sock;
             fd_set soc_insp;
             timeval insp_time;
             short bf[1024];
             //short * pbf;
             init_program();
             init_instrument();
             insp_time.tv_sec = 0;
             insp_time.tv_usec = 10000*2;
             soc_insp.fd_count = 1; 
             soc_insp.fd_array[0] = m_sock;
             select(0, &soc_insp, NULL, NULL, &insp_time);
             textBox1->Text=Convert::ToString(recv(m_sock, (char *)bf, 1500, 0));
Ошибок нет при компиляции, но при нажатии кнопки прога тупо виснет и всё, висит как лампочка, дважды два четыре не помножит
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2012, 17:34
Ответы с готовыми решениями:

Получение данных из внешних источников.
Здравствуйте. Задаче надо получать курсы валют ЦБ. Для этого существуют открытые ресурсы (например на сайте ЦБ можно составить запрос и...

Линк данных Access-Excel, Получение данных с внешних источников
Описание задачи: Есть некая база в Аксесе, данные с которой выгружаются в ексель с помощью линка. Т.е. в екселе организован метод...

Подтягивание данных из внешних источников
Все добрый вечер! Недавно столкнулся с таким вопросом: Имеется обычное html-письмо и таблица Экселя на Диске Гугл. От меня потребовали,...

2
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
23.03.2012, 09:49  [ТС]
А я знаю, чего она виснет
две сетевухи, одна подключена к интернету, вторая к железу
Когда идет соединение, оно уходит в интернет не получает ответа и всё вот и висит Отключил одну сетевуху, всё запахало

Получаю данные от recv, как мне с ними работать, кто-нибудь скажет?
0
1 / 1 / 0
Регистрация: 25.10.2009
Сообщений: 6
01.08.2012, 11:43
Если тема ещё актуальна, вопрос: почему ты адрес ставишь inet_addr("222.222.222.200"); ?
Тут нужен адрес твоей сетевухи/сетевух если их много, причём лучше самому не ставить явно (вообще старайтесь писать програмонезависимый код):
Code
1
2
3
4
5
6
7
8
9
10
11
HOSTENT *hst;
char host[128];
gethostname(host, 128);
hst = gethostbyname(host);
......
my_addr.sin_addr = ((sockaddr_in*)hst->h_addr_list[0])->s_addr; // где 0 номер сетевухи
// вот печать всех сетевух
int i = 0;
while((sockaddr_in*)hst->h_addr_list[i++])
         cout << "Network card number " << i-1 << ", ip address is: " << inet_ntoa(((sockaddr_in*)hst->h_addr_list[i-1])->sin_addr) << endl;
cout << "All networks cards: " << i-1 << endl;
Вообщем-то не совсем красиво, но смысл думаю ясен ....
Удачи...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2012, 11:43
Помогаю со студенческими работами здесь

Импорт данных в SQL 2000 из внешних источников
Как импортировать данные типа Date из внешней таблицы.(Paradox Dbase mdb).Проблема возникает, когда дата либо маленькая,либо большая...

Как определить уровень внешних источников (в децибеллах), используя bass.dll?
Подскажите пожалуйста как определить децибелы с помощью библиотек bass.dll.

Как настроить получение данных из источников в Интернете
Добрый день! Никак не могу решить задачу и очень надеюсь на Вашу помощь. У меня есть таблица-эксель (во вложении). Мне необходимо,...

Получение "внешних" Массивов
драма со счастливым концом эпиграф:не то что бы это раздражало, но бесит! прелюдия:началось все тихо и мирно, в рамках поисков...

Получение списка внешних накопителей
Здравствуйте. Не могу нигде найти информацию о том, как получить список подключенных внешних накопителей (флешек, дисков). Нужна буква...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru