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

 
avoitenko :

842/64비트를 빌드합니다. 캔버스를 선언할 때:

오류:

해결되지 않은 정적 변수 'CCanvas::m_default_colors'

저만 그런가요?

누구나 가지고 있는 것 같습니다.

메타드라이버 :

명시적으로 초기화를 시도하십시오.

문서로 판단하면 이것은 버그입니다. https://www.mql5.com/ru/docs/basis/oop/staticmembers

..... 정적 클래스 멤버는 전역 수준에서 명시적으로 초기화할 필요가 없으며 프로그램이 로드될 때 자동으로 초기화됩니다. ......

클래스 코드에는 변경 사항이 없었고 이전에는 이러한 오류가 없었습니다.

 //+------------------------------------------------------------------+
//| Class CCanvas                                                    |
//| Usage: class for working with a dynamic resource                 |
//+------------------------------------------------------------------+
class CCanvas
  {
private :
   uint               m_style;                   // line style template
   uint               m_style_idx;               // variable - current index of bit in line style template
   static uint        m_default_colors [ 9 ];       // default colors

protected :
 
tol64 :

누구나 가지고 있는 것 같습니다.

클래스 코드에는 변경 사항이 없었고 이전에는 이러한 오류가 없었습니다.

이것은 컴파일 방법입니다:

 #include <Canvas\Canvas.mqh>

static uint   CCanvas::m_default_colors[ 9 ] = 
  { 0x444444 , 0x444444 , 0x444444 , 0x444444 , 0x444444 , 0x444444 , 0x444444 , 0x444444 , 0x444444 };

CCanvas bmp;
 

안녕하세요! 문제를 해결하는 데 도움이 됩니다.

MT4에서 MT5로 개발을 옮기기 시작했습니다. 새 MQL에서 처음으로 DLL을 로드하는 데 문제가 발생했습니다. 잘 컴파일되지만 칠면조를 실행할 때. "dll을 열 수 없습니다" 오류. 더 이상 메시지가 없습니다. 관련 기사를 다시 읽었습니다. 필요한 곳에 모든 것을 배치한 것 같습니다. 라이브러리는 ...\Terminals\MetaTrader 5\MQL5\Libraries 디렉토리에 있습니다.

 //+------------------------------------------------------------------+
//|                                                   Test MySQL.mq5 |
//|                                                               me |
//|                                                               no |
//+------------------------------------------------------------------+
#property copyright "me"
#property link        "no"
#property version    "1.00"
#property indicator_separate_window

#import "libmysql.dll"
int mysql_init( int db);
int mysql_errno( int TMYSQL);
int mysql_real_connect( int TMYSQL, string host, string user, string password, string DB, int port, int socket, int clientflag);
int mysql_real_query( int TMSQL, string query, int length);
void mysql_close( int TMSQL);
#import 


int i = 0 ;
int mysql;
string query;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   Print ( GetLastError ());
   mysql = mysql_init(mysql);
   if (mysql!= 0 ) Print ( "allocated" );
   string host= "localhost" ;
   string user= "root" ;
   string password= "1111" ;
   string DB= "fxdb" ;
   int clientflag = 0 ;
   int port = 3306 ;
   string socket= "" ;
   int res = mysql_real_connect(mysql,host,user,password,DB,port,socket,clientflag);
   int err = GetLastError ();
   if (res == mysql) Print ( "connected" );
   else Print ( "error = " ,mysql, " " ,mysql_errno(mysql), " " );
   //До этой строки все правильно работает.
   i++;   
   StringConcatenate (query, "INSERT INTO " ,
                                     //CharToStr(039),
                                     "test" , 
                                     //CharToStr(039), 
                                     " (" , 
                                     //CharToStr(039), 
                                     "ID" , 
                                     //CharToStr(039), 
                                     ", " ,
                                     //CharToStr(039), 
                                     "text" ,
                                     //CharToStr(039), 
                                     ") VALUES (" , 
                                     CharToString ( 039 ),
                                     DoubleToString (i, 0 ),
                                     CharToString ( 039 ),
                                     ", " ,
                                     CharToString ( 039 ), 
                                     "testtext" ,
                                     CharToString ( 039 ),
                                     ")"
                                    );
   Print ( "i = " , i);                                    
   Print (query);
   
 
   int length = StringLen (query);
   mysql_real_query(mysql,query,length);
   int myerr=mysql_errno(mysql);
   if (myerr> 0 ) Print ( "error=" ,myerr); else Print (i, "good" ); 
   return ( 0 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction ( const MqlTradeTransaction & trans,
                         const MqlTradeRequest & request,
                         const MqlTradeResult & result)
  {
//---
   
  }
//+------------------------------------------------------------------+
 
MetaDriver :

이것은 컴파일 방법입니다:

예, 하지만 왜 이 모든 것이 있습니까?

클래스 생성자에서 이 배열도 새 값으로 초기화되어 제안한 값을 덮어씁니다.

일반적으로 다음과 같습니다.

 #include <Canvas\Canvas.mqh>
uint CCanvas::m_default_colors[ 9 ]={ 0 };
CCanvas bmp;
오류 없이 컴파일됩니다. 그리고 개발자가 도움말에 m_default_colors 를 입력하는 의미를 설명하도록 합니다.
 
avoitenko :

예, 하지만 왜 이 모든 것이 있습니까?

클래스 생성자에서 이 배열도 새 값으로 초기화되어 제안한 값을 덮어씁니다.

일반적으로 다음과 같습니다.

오류 없이 컴파일됩니다. 그리고 개발자가 도움말에 m_default_colors 를 입력하는 의미를 설명하도록 합니다.

글쎄, 나는 즉시 이것이 버그라고 말했다. 서비스 데스크에서 이것으로.

문서로 판단하면 이것은 버그입니다. https://www.mql5.com/ru/docs/basis/oop/staticmembers

..... 정적 클래스 멤버는 전역 수준에서 명시적으로 초기화할 필요가 없으며 프로그램이 로드될 때 자동으로 초기화됩니다. ......

내 제안의 나머지 부분은 이 버그가 있는 상태에서 프로그램을 실행하는 것입니다. 중간 초기화는 이러한 기능을 수행하므로 버그가 수정될 때까지 기다리지 않고 작업할 수 있습니다.

이것은 그러한 상황에서 나의 행동의 전형적인 계획입니다 .

 

MetaDriver :

중간 초기화는 이러한 기능을 수행하므로 버그가 수정될 때까지 기다리지 않고 작업할 수 있습니다.

이것은 그러한 상황에서 나의 행동의 전형적인 계획입니다 .

그리고 내 행동도. 고맙습니다.

그리고 서비스 데스크는 이 스레드를 읽고 다시 읽어서 수정합니다.

 

Al_key :

"dll을 열 수 없습니다" 오류. 더 이상 메시지가 없습니다.

DLL의 터미널을 찾을 수 없습니다.

복사 경로는 네비게이터에서 MQL5 폴더의 속성을 취하여 MetaEditor를 통해 볼 수 있으며 경로는 "Location" 열에 지정됩니다. 그런 다음 DLL을 [경로]\MQL5\Libraries\ 폴더에 복사합니다.

 
Vladon :

친애하는 관리, 메타 인용 DEMO 서버와 관련된 것

일지에 쓰기: 2013.08.01 11:58:35 회로망 '1449777': MetaQuotes-Demo에 대한 연결이 끊어졌습니다.

계정은 과도한 거래 활동으로 거래 서버에 의해 금지되었습니다. 거래 플랫폼은 보호되며 매 틱마다 무심코 거래 요청 을 보내는 계정을 비활성화합니다.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
avoitenko :

DLL의 터미널을 찾을 수 없습니다.

복사 경로는 네비게이터에서 MQL5 폴더의 속성을 취하여 MetaEditor를 통해 볼 수 있으며 경로는 "Location" 열에 지정됩니다. 그런 다음 DLL을 [경로]\MQL5\Libraries\ 폴더에 복사합니다.

예, 하지만 제가 쓴 것처럼 이미 libmysql [경로]\MQL5\Libraries\를 복사했습니다.
 
Al_key :
예, 하지만 제가 쓴 것처럼 이미 libmysql [경로]\MQL5\Libraries\를 복사했습니다.

메타 편집기로 이동하여 MQL5 폴더의 속성을 열면 일반적으로 내 터미널의 폴더와 연결되지 않은 일종의 경로가 있습니다. 지금은 항상 이렇습니까 아니면 조정할 수 있습니까? 네, 그건 그렇고, 모든 것을 복사했습니다. 여전히 같은 오류입니다.


그래서, 게시물의 새로운 편집. 모든 것이 작동하는 것 같고 다른 많은 오류가 있습니다. 이제 알아낼 것입니다. 그러나 칠면조와 고문 및 기타 데이터에 대한 표준 폴더를 만드는 방법. /portable 키가 도움이 되나요?