오류, 버그, 질문 - 페이지 2115

 
Andrey Voytenko :

최대 위치 주석 (31자)을 사용하면 툴팁에 ID를 표시할 공간이 더 이상 없는 것 같습니다.

당신은 즉시 추측하지 않습니다!
 

안녕하세요!

이메일을 자주 보내는 고문이 있습니까?

하루에 시간당 얼마입니까?

16편의 편지를 보냈는데 5분 몇시간 텅텅 빈 일기장에

메일: 공간이 부족합니다.


누구든지 이 주제에 대한 경험이 있습니까?

PS Gmail google을 사용하면 1초마다 문자를 수신할 수 있습니다. 문자가 터미널/서버 대기열에 더 빨리 누적되고 더 느리게 전송된다고 가정합니다(얼마만큼?)

그리고 다시 한번 어드바이저/터미널이 편지를 대기열에 넣으려고 시도하지만 대기열은 이미 가득 찼습니다!!!

 
Roni Iron :

안녕하세요!

이메일을 자주 보내는 고문이 있습니까?

하루에 시간당 얼마입니까?

16편의 편지를 보냈는데 5분 몇시간 텅텅 빈 일기장에

메일: 공간이 부족합니다.


누구든지 이 주제에 대한 경험이 있습니까?

PS Gmail google을 사용하면 1초마다 문자를 수신할 수 있습니다. 문자가 터미널/서버 대기열에 더 빨리 누적되고 더 느리게 전송된다고 가정합니다(얼마만큼?)

그리고 다시 한번 어드바이저/터미널이 편지를 대기열에 넣으려고 시도하지만 대기열은 이미 가득 찼습니다!!!


무엇 때문에? PUSH는 오랫동안 발명되었습니다.

 
fxsaber :

문서 오류


fxsaber :

문서 오류

감사합니다. 수정하겠습니다.

 
A100 :

저는 포럼에서 _WIN64와 유사한 MetaEditor의 미리 정의된 매크로 부족에 대한 사용자 토론을 반복적으로 만났습니다. 메타에디터는 범용 32-64비트 코드를 동시에 생성하기 때문에 관리가 필요없다는 답변이 나왔다.

동시에 많은 사람들이 구조 필드를 추가하여 https://www.mql5.com/ru/forum/225498/page2#comment_6401835 정렬을 사용합니다.

그리고 실제로 기성품 .dll(더 이상 변경할 수 없음)을 사용하는 경우 추가 정렬 없이는 할 수 없습니다. 그러나 x86 및 x64에서는 이 추가가 다르게 보일 수 있습니다. 이는 구조가 TerminalInfoInteger( TERMINAL_X64 )가 작동하지 않는 .mq5 파일의 컴파일 단계에서 설정되기 때문에 여전히 _WIN64의 유사체가 필요하다는 것을 의미합니다.

이제 추가 정보를 염두에 두어야 합니다. 사소하게 절약한 결과 미묘한 오류가 발생할 위험이 있습니다.

다음은 x64 및 x86에서 작동하는 GetOpenFileName이라는 개발자의 예입니다. 문제가 해결되는지 확인

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

다음은 x64 및 x86에서 작동하는 GetOpenFileName이라는 개발자의 예입니다. 문제가 해결되는지 확인

실제로 코드는 거의 두 배나 더 많이 필요하며,

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

.dll이 있는 프로그램이 매스 세그먼트용이 아니라는 사실에도 불구하고
다시 말하지만 선택 사항이 있어야 합니다. 별도(32\64) 컴파일 및 2배 더 간단한 코드
또는 코드의 보편성과 상당한 복잡성
게다가 _WIN64의 유사체는 _IsX64 원칙에 따라 입력할 수 있습니다(문서화되지 않았지만 사용할 수 있음)

 

추가 인수 - 종종 하나의 .dll만 프로젝트에 첨부되며(x86 또는 x64만) 이 프로젝트의 .mqh 파일에 이와 같은 행을 설정하는 것은 불가능합니다.

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

도움말 예시

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

따라서 질문, mt 4에서 OBJ_RECTANGLE 의 채우기를 변경하는 방법 ???

 
우리는 32비트 버전의 Metatrader 개발을 곧 중단하는 것을 목표로 합니다.

32비트 dll 지원 문제는 자동으로 사라집니다.
 

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

이 시간까지 실행 중에 발생하는 알려진 모든 오류를 수정하는 것이 좋습니다(예: #1841289 https://www.mql5.com/en/forum/1111/page2025#comment_5766707 ).

이 연산자와 다른 연산자의 동작은 메서드와 일치하지 않습니다. 메소드와 관련된 연산자는 구문상의 설탕에 지나지 않습니다.

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