Fehler, Irrtümer, Fragen - Seite 2115

 
Andrey Voytenko:

Wenn man den Positionskommentar so weit wie möglich ausschöpft (31 Zeichen), ist offenbar kein Platz mehr für die Anzeige der ID in der QuickInfo.

Sie würden es nicht sofort merken!
 

Guten Tag!

Hat jemand einen EA, der häufig E-Mails versendet?

Wie viele bekommen Sie pro Stunde, pro Tag?

Ich habe 16 E-Mails in 5 Minuten verschickt, und das Protokoll war einige Stunden lang leer, dann begann es zu schreiben

Mail: nicht genug Platz für


Wer hat Erfahrung mit diesem Thema?

P.S. Google Mail ermöglicht es Ihnen, E-Mails jede Sekunde zu erhalten, ich nehme an, dass sich die E-Mails schneller in der Warteschlange des Terminals/Servers stapeln und langsamer gesendet werden (wie viel?)

Und wieder einmal versucht der Berater/Terminal, die E-Mail in die Warteschlange zu stellen, und die Warteschlange ist bereits voll!!!

 
Roni Iron:

Guten Tag!

Hat jemand einen EA, der häufig E-Mails versendet?

Wie viele bekommen Sie pro Stunde, pro Tag?

Ich habe 16 E-Mails in 5 Minuten verschickt, und das Protokoll war einige Stunden lang leer, dann begann es zu schreiben

Mail: nicht genug Platz für


Wer hat Erfahrung mit diesem Thema?

P.S. Google Mail ermöglicht es Ihnen, E-Mails jede Sekunde zu erhalten, ich nehme an, dass sich die E-Mails schneller in der Warteschlange des Terminals/Servers stapeln und langsamer gesendet werden (wie viel?)

Und wieder einmal versucht der Berater/Terminal, die E-Mail in die Warteschlange zu stellen, und die Warteschlange ist bereits voll!!!


Warum? Sie haben PUSH schon vor langer Zeit erfunden.

 
fxsaber:

Fehler in der Dokumentation


fxsaber:

Fehler in der Dokumentation

Vielen Dank, wir werden das in Ordnung bringen.

 
A100:

Ich bin im Forum immer wieder auf Diskussionen von Anwendern gestoßen, die sich über das Fehlen eines vordefinierten Makros wie _WIN64 in MetaEditor beschwert haben. Die Antwort der Verwaltung lautete, dass kein Bedarf besteht, da MetaEditor gleichzeitig universellen 32-64-Bit-Code erzeugt.

Gleichzeitig verwenden viele Leute die https://www.mql5.com/ru/forum/225498/page2#comment_6401835 Ausrichtung, indem sie die Felder an die Struktur anhängen

Und in der Tat, wenn Sie eine vorgefertigte .dll verwenden (die nicht mehr geändert werden kann), können Sie auf eine zusätzliche Ausrichtung nicht verzichten. Aber in x86 und x64 kann dieser Zusatz anders aussehen, was bedeutet, dass das _WIN64-Analog noch benötigt wird, weil die Struktur in der Phase der Kompilierung der .mq5-Datei definiert wird, in der TerminalInfoInteger( TERMINAL_X64 ) nicht funktioniert

Jetzt müssen wir zusätzliche Informationen im Auge behalten. Durch die Einsparung einer Kleinigkeit besteht das Risiko, einen schwer fassbaren Fehler zu erhalten

Hier ist ein Beispiel von den Entwicklern - GetOpenFileName, das in x64 und x86 funktioniert. Prüfen Sie, ob das Problem dadurch gelöst wird

//+------------------------------------------------------------------+
//|                                                   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:

Hier ist ein Beispiel von den Entwicklern - GetOpenFileName, das in x64 und x86 funktioniert. Prüfen Sie, ob das Problem dadurch gelöst wird

Es ist sogar fast doppelt so viel Code erforderlich,

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

während Programme mit .dll nicht für das Massensegment bestimmt sind
Auch hier muss man sich entscheiden: Aufgeteilte (32\64) Kompilierung und doppelt so viel Code
oder Allgemeingültigkeit und eine erhebliche Komplikation des Codes.
Außerdem können Sie das _WIN64-Analogon nach dem _IsX64-Prinzip einführen (es ist nicht dokumentiert, aber Sie können es verwenden)

 

Ein zusätzliches Argument ist, dass oft nur eine .dll an ein Projekt angehängt ist (entweder nur x86 oder nur x64) und Sie eine Zeile wie diese in der .mqh-Datei dieses Projekts nicht angeben können

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

Beispiel aus der Hilfe

//+------------------------------------------------------------------+ 
//| 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); 
  } 

Daher die Frage, wie man die Füllung inOBJ_RECTANGLE in mt 4 ändern kann?

 
Wir beabsichtigen, die Entwicklung von 32-Bit-Versionen von Metatrader bald ganz einzustellen.

Das Problem mit der 32-Bit-DLL-Unterstützung verschwindet dann automatisch.
 

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

Es ist ratsam, alle bekannten Laufzeitfehler zu diesem Zeitpunkt zu korrigieren, z.B. diesen #1841289 https://www.mql5.com/ru/forum/1111/page2025#comment_5766707

Das Verhalten dieses und anderer Operatoren entspricht nicht den Methoden. While-Operator in Bezug auf Methoden ist nichts weiter als syntaktischer Zucker

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