Erros, bugs, perguntas - página 2115

 
Andrey Voytenko:

Parece que se usar o comentário da posição tanto quanto possível (31 caracteres), então não há mais espaço para exibir o ID na ponta da ferramenta.

Não o saberia de imediato!
 

Boa tarde!

Alguém tem uma EA que envia emails frequentemente?

Quantos recebem por hora, por dia?

Recebi 16 e-mails em 5 minutos e o registo ficou vazio durante algumas horas e depois começou a escrever

Correio: não há espaço suficiente para


Quem tem alguma experiência sobre este assunto.

P.S. Gmail google permite-me receber e-mails a cada segundo , presumo que os e-mails se acumulam mais rapidamente na fila terminal/servidor mas são enviados mais lentamente (quanto ?)

E mais uma vez o conselheiro/terminal está a tentar enfileirar o e-mail , e a fila já está cheia!!!

 
Roni Iron:

Boa tarde!

Alguém tem uma EA que envia emails frequentemente?

Quantos recebem por hora, por dia?

Recebi 16 e-mails em 5 minutos e o registo ficou vazio durante algumas horas e depois começou a escrever

Correio: não há espaço suficiente para


Quem tem alguma experiência sobre este assunto.

P.S. Gmail google permite-lhe receber e-mails a cada segundo, presumo que os e-mails se acumulam mais rapidamente na fila terminal/servidor e são enviados mais lentamente (quanto ?)

E mais uma vez o conselheiro/terminal está a tentar enfileirar o e-mail , e a fila já está cheia!!!


porquê? eles inventaram a PUSH há muito tempo

 
fxsaber:

Erro na documentação


fxsaber:

Erro na documentação

Obrigado, vamos arranjá-lo.

 
A100:

Encontrei-me repetidamente no fórum de utilizadores sobre a falta de uma macro predefinida semelhante a _WIN64. A resposta da administração foi que não há necessidade porque o MetaEditor gera código universal de 32-64 bits ao mesmo tempo.

Ao mesmo tempo, muitas pessoas utilizam o alinhamento https://www.mql5.com/ru/forum/225498/page2#comment_6401835, anexando os campos à estrutura

E de facto, se utilizar um .dll já pronto (que já não pode ser alterado), não pode prescindir de um alinhamento adicional. Mas em x86 e x64 esta adição pode parecer diferente, o que significa que o análogo _WIN64 ainda é necessário porque a estrutura é definida na fase de compilação do ficheiro .mq5 onde TerminalInfoInteger( TERMINAL_X64 ) não funciona

Agora temos de ter em mente a informação extra. Como resultado da poupança numa bagatela, existe o risco de se obter um erro elusivo

Aqui está um exemplo dos criadores - GetOpenFileName que funciona em x64 e x86. Veja se resolve o problema

//+------------------------------------------------------------------+
//|                                                   GetOpenFileName|
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+

struct SNativeStr64;
struct SNativeStr32;

#import "kernel32.dll"
int  GetLastError();
//--- x64
long LocalAlloc(uint flags,long uBytes);
void LocalFree(long memptr);
int  lstrlenW(long ptr);    // 64 bit
long lstrcpyW(long dst,const string src);
long lstrcpyW(string &dst,long src);

//--- x86
int  LocalAlloc(uint flags,int uBytes);
void LocalFree(int memptr);
int  lstrcpyW(int dst,const string src);
int  lstrlenW(int ptr);     // 32 bit
int  lstrcpyW(string &dst,int src);
#import

#define  OFN_PATHMUSTEXIST  0x00000800
#define  OFN_FILEMUSTEXIST  0x00001000
#define  OFN_HIDEREADONLY   0x00000004
#define  LMEM_ZEROINIT      0x40

struct OPENFILENAME32;
struct OPENFILENAME64;

#import "Comdlg32.dll"
int GetOpenFileNameW(OPENFILENAME64 &ofn);
int GetOpenFileNameW(OPENFILENAME32 &ofn);
#import
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
struct SNativeStr
  {
private:
                     SNativeStr(const SNativeStr &) { }

protected:
   T                 ptr;

public:
                     SNativeStr():ptr(0) { }
                    ~SNativeStr() { Clear(); }
   void              Clear(void) { if(ptr!=0) { LocalFree(ptr); ptr=0; } }
   T                 Detach(void) { T p=ptr; ptr=0; return(p); }

   int               Length(void) const { return(ptr==0?0:kernel32::lstrlenW(ptr)); }
   bool              Reserv(uint length) { Clear(); return((ptr=LocalAlloc(LMEM_ZEROINIT,T(sizeof(ushort)*(length+1))))!=0); }
   void              operator=(const string str)
     {
      Clear();
      ptr=LocalAlloc(LMEM_ZEROINIT,T(sizeof(ushort)*(StringLen(str)+2)));
      lstrcpyW(ptr,str);
     }
   bool              GetValue(string &str)
     {
      if(ptr==0)
         str=NULL;
      else
        {
         if(!StringInit(str,Length()))
            return(false);
         lstrcpyW(str,ptr);
        }
      //---
      return(true);
     }
  };

struct SNativeStr64 : public SNativeStr<long> { };
struct SNativeStr32 : public SNativeStr<int>  { };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct OPENFILENAME64
  {
   uint              lStructSize;
   uint              dummy1;
   long              hwndOwner;
   long              hInstance;
   SNativeStr64      lpstrFilter;
   SNativeStr64      lpstrCustomFilter;
   uint              nMaxCustFilter;
   uint              nFilterIndex;
   SNativeStr64      lpstrFile;
   uint              nMaxFile;
   uint              dummy2;
   SNativeStr64      lpstrFileTitle;
   uint              nMaxFileTitle;
   uint              dummy3;
   SNativeStr64      lpstrInitialDir;
   SNativeStr64      lpstrTitle;
   uint              Flags;
   ushort            nFileOffset;
   ushort            nFileExtension;
   SNativeStr64      lpstrDefExt;
   long              lCustData;
   long              lpfnHook;
   long              lpTemplateName;
   long              pvReserved;
   uint              dwReserved;
   uint              FlagsEx;
   
   OPENFILENAME64()
      : lStructSize(sizeof(OPENFILENAME64))
      , dummy1(0)
      , hwndOwner(0)
      , hInstance(0)
      , nMaxCustFilter(0)
      , nFilterIndex(0)
      , nMaxFile(0)
      , dummy2(0)
      , nMaxFileTitle(0)
      , dummy3(0)
      , Flags(0)
      , nFileOffset(0)
      , nFileExtension(0)
      , lCustData(0)
      , lpfnHook(0)
      , lpTemplateName(0)
      , pvReserved(0)
      , dwReserved(0)
      , FlagsEx(0)
     {
     }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct OPENFILENAME32
  {
   uint              lStructSize;
   int               hwndOwner;              // HWND
   int               hInstance;              // HINSTANCE
   SNativeStr32      lpstrFilter;
   SNativeStr32      lpstrCustomFilter;
   uint              nMaxCustFilter;
   uint              nFilterIndex;
   SNativeStr32      lpstrFile;
   int               nMaxFile;
   SNativeStr32      lpstrFileTitle;
   uint              nMaxFileTitle;
   SNativeStr32      lpstrInitialDir;
   SNativeStr32      lpstrTitle;
   uint              Flags;
   ushort            nFileOffset;
   ushort            nFileExtension;
   SNativeStr32      lpstrDefExt;
   int               lCustData;
   int               lpfnHook;
   int               lpTemplateName;
   int               pvReserved;
   uint              dwReserved;
   uint              FlagsEx;
   
   OPENFILENAME32()
      : lStructSize(sizeof(OPENFILENAME32))
      , hwndOwner(0)
      , hInstance(0)
      , nMaxCustFilter(0)
      , nFilterIndex(0)
      , nMaxFile(0)
      , nMaxFileTitle(0)
      , Flags(0)
      , nFileOffset(0)
      , nFileExtension(0)
      , lCustData(0)
      , lpfnHook(0)
      , lpTemplateName(0)
      , pvReserved(0)
      , dwReserved(0)
      , FlagsEx(0)
     {
     }            
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool GetOpenFileName(string &path,const string filter,const string initial_dir,const string title)
  {
   int res;

   if(_IsX64)
     {
      OPENFILENAME64 ofn;

      ofn.lStructSize=(uint)sizeof(ofn);
      ofn.lpstrFile.Reserv(1024);
      ofn.nMaxFile   =1024;
      ofn.Flags      =OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
      ofn.lpstrFilter=filter;
      ofn.lpstrInitialDir=initial_dir;
      ofn.lpstrTitle=title;

      if((res=GetOpenFileNameW(ofn))==1)
        {
         StringInit(path,1024);
         ofn.lpstrFile.GetValue(path);
        }
     }
   else
     {
      OPENFILENAME32 ofn;

      ofn.lStructSize=(uint)sizeof(ofn);
      ofn.lpstrFile.Reserv(1024);
      ofn.nMaxFile   =1024;
      ofn.Flags      =OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;
      ofn.lpstrFilter=filter;
      ofn.lpstrInitialDir=initial_dir;
      ofn.lpstrTitle=title;

      if((res=GetOpenFileNameW(ofn))==1)
        {
         StringInit(path,1024);
         ofn.lpstrFile.GetValue(path);
        }
     }
//---
   return(res!=0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   string path;
   if(GetOpenFileName(path,"Source code\0*.mq5\0",TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL5\\Experts\\","Select source file"))
      Print(path);
   else
      PrintFormat("Failed with error: %x",kernel32::GetLastError());
  }
//+------------------------------------------------------------------+
 
Rashid Umarov:

Aqui está um exemplo dos criadores - GetOpenFileName, que funciona em x64 e x86. Veja se resolve o problema

Na realidade, requer quase o dobro do código,

void OnStart()
{
    _IsX64 ? OnStart64() : OnStart32();
}

enquanto os programas com .dll não são para o segmento de massa
Mais uma vez deve haver uma escolha: Compilação dividida (32\64) e o dobro do código
ou universalidade e complicação de código considerável.
Além disso, pode introduzir o analógico _WIN64 de acordo com o princípio _IsX64 (não está documentado mas pode utilizá-lo)

 

Um argumento adicional é que muitas vezes existe apenas um .dll anexado a um projecto (ou apenas x86 ou x64) e não se pode especificar uma linha como esta no ficheiro .mqh desse projecto

#ifndef _WIN64
Не_поддерживается
#endif
Por exemplo, aqui https://www.mql5.com/ru/forum/224745
ATcl - интерпретатор Tcl для MT4
ATcl - интерпретатор Tcl для MT4
  • 2018.01.15
  • www.mql5.com
Праздники прошли плодотворно, и представляю на суд общественности ATcl - встроенный интерпретатор Tcl в MT4...
 

Exemplo de ajuda

//+------------------------------------------------------------------+ 
//| Cоздает прямоугольник по заданным координатам                    | 
//+------------------------------------------------------------------+ 
bool RectangleCreate(const long            chart_ID=0,        // ID графика 
                     const string          name="Rectangle",  // имя прямоугольника 
                     const int             sub_window=0,      // номер подокна  
                     datetime              time1=0,           // время первой точки 
                     double                price1=0,          // цена первой точки 
                     datetime              time2=0,           // время второй точки 
                     double                price2=0,          // цена второй точки 
                     const color           clr=clrRed,        // цвет прямоугольника 
                     const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий прямоугольника 
                     const int             width=1,           // толщина линий прямоугольника 
                     const bool            fill=false,        // заливка прямоугольника цветом            < --- Есть только тут  дальше в коде нет
                     const bool            back=false,        // на заднем плане 
                     const bool            selection=true,    // выделить для перемещений 
                     const bool            hidden=true,       // скрыт в списке объектов 
                     const long            z_order=0)         // приоритет на нажатие мышью 
  { 
//--- установим координаты точек привязки, если они не заданы 
   ChangeRectangleEmptyPoints(time1,price1,time2,price2); 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим прямоугольник по заданным координатам 
   if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE,sub_window,time1,price1,time2,price2)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать прямоугольник! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- установим цвет прямоугольника 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); 
//--- установим стиль линий прямоугольника 
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); 
//--- установим толщину линий прямоугольника 
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); 
//--- отобразим на переднем (false) или заднем (true) плане 
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); 
//--- включим (true) или отключим (false) режим выделения прямоугольника для перемещений 
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект 
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection 
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); 
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); 
//--- установим приоритет на получение события нажатия мыши на графике 
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); 
//--- успешное выполнение 
   return(true); 
  } 

Daí a questão, como alterar o preenchimento deOBJ_RECTANGLE no mt 4 ???

 
O nosso objectivo é parar o desenvolvimento de versões de 32 bit do Metatrader em breve.

O problema com o suporte dll de 32 bits desaparecerá automaticamente.
 

Renat Fatkhullin:
Мы нацелены вообще скоро остановить разработки 32 битных версий Метатрейдера.

É aconselhável corrigir todos os erros de tempo de execução conhecidos neste ponto, por exemplo, este #1841289 https://www.mql5.com/ru/forum/1111/page2025#comment_5766707

O comportamento deste e de outros operadores não corresponde aos métodos. Enquanto operador em relação aos métodos nada mais é do que açúcar sintáctico

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.09.15
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы