mql4 + server + 'Ws2_32.dll' => Access violation read to 0x000000XX

 

Всем привет, переписал с mql5 на mql4 вот эту статью https://www.mql5.com/ru/articles/2599, после установки советника появляется ошибка:

Access violation read to 0x0000000A in 'Ws2_32.dll'

вот кусок из кода

      // биндимся к адресу и порту

      Print("try bind..."+Host+":"+string(Port));

      char ch[]; StringToCharArray(Host,ch);

      sockaddr_in addrin;

      addrin.sin_family=AF_INET;

      addrin.sin_addr.u.S_addr=inet_addr(ch);

      addrin.sin_port=htons(Port);

      ref_sockaddr ref; ref.in=addrin;

      if(bind(server,ref.ref,sizeof(addrin))==SOCKET_ERROR)

        {

         int err=WSAGetLastError();

         if(err!=WSAEISCONN) { Print("-Connect failed error: "+WSAErrorDescript(err)+". Cleanup socket"); CloseClean(); return; }

        }

      // ставим в неблокирующий режим

      int non_block=1;

      res=ioctlsocket(server,(int)FIONBIO,non_block);

      if(res!=NO_ERROR) { Print("ioctlsocket failed error: "+string(res)); CloseClean(); return; }

      Print("start server ok");



Ошибка вылазит на строчке if(bind(server,ref.ref,sizeof(addrin))==SOCKET_ERROR)

Может кто с этой проблемой сталкивался?

Работа с сокетами в MQL, или Как стать провайдером сигналов
Работа с сокетами в MQL, или Как стать провайдером сигналов
  • 2016.07.12
  • o_o
  • www.mql5.com
Сокеты… Что вообще сейчас в нашем информационном мире может без них существовать? Впервые появившиеся в 1982 г. и практически не изменившиеся до настоящего времени, они исправно работают на нас каждую секунду. Это основа сети, нервные окончания нашей Matrix, в которой мы живем. Утром вы включили терминал MetaTrader, и он сразу создал сокеты и...
 
файлы
Файлы:
SocketLib.mqh  69 kb
 

в мт4  32 битные указатели

замените SOCKET64 на SOCKET32 в вызовах функций

 
o_o:

в мт4  32 битные указатели

замените SOCKET64 на SOCKET32 в вызовах функций

Огромное спасибо!! заработало, везде заменил на 32 битные указатели, есть ещё один вопрос, выдаётся на строчке "      int res=WSAStartup(MAKEWORD(2,2), wsaData);" предуплеждение "check operator precedence for possible error; use parentheses to clarify precedence TestServer.mq4 57 26" с чем может быть связано предупреждение?

 

варнинг на приведении типов.  ему define не нравится.  надо скобок побольше и явного приведения к int.
не напрягает особо.

 
Vitaliy Kashcheev:
файлы

У меня ваш код заработал. 

в Socketlib   заменил одну строку 

#define SOCKET64 uint  

 
Sergey Likho:

У меня ваш код заработал. 

в Socketlib   заменил одну строку 

#define SOCKET64 uint  

ну это понятно) когда уже про указатели нам наш друг подсказал.

 
o_o:

варнинг на приведении типов.  ему define не нравится.  надо скобок побольше и явного приведения к int.
не напрягает особо.

Если Вам не трудно, пожалуйста подкорректируйте мои файлы чтоб не было варнингов, если это возможно)

Причина обращения: