Metatrader4 bug hunt

 
Privet,

U menia voznikli 2 situaciji, katoryje do six por pokazyvajut oshybki metatrater 4 (build 177):

1) Pri zapuske indikatora, katoryj delajet ObjectFind()/ObjectCreate() tipa arrows 4erez interfeis funkciju iCustom() vylezajut oshybki:

12:52:37 2005.07.22 15:00 BadObjects EURUSD,M30: ObjectFind function internal error
12:52:37 2005.07.22 15:00 BadObjects EURUSD,M30: ObjectCreate function internal error
12:52:37 2005.07.22 15:00 BadObjects EURUSD,M30: error: can't create Arrow! code #4014 unknown command
12:52:37 2005.07.22 15:29 BadObjects EURUSD,M30: ObjectFind function internal error
12:52:37 2005.07.22 15:29 BadObjects EURUSD,M30: ObjectCreate function internal error
12:52:37 2005.07.22 15:29 BadObjects EURUSD,M30: error: can't create Arrow! code #4014 unknown command

Kod indikatora:


//+------------------------------------------------------------------+
//|                                                   BadObjects.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

#include <stdlib.mqh>

void SetArrow(datetime ArrowTime, double Price, double ArrowCode, color ArrowCollor)
{
 int err;
 string ArrowName = TimeToStr(ArrowTime);
   if (ObjectFind(ArrowName) != -1) ObjectDelete(ArrowName);
   if(!ObjectCreate(ArrowName, OBJ_ARROW, 0, ArrowTime, Price))
    {
     err=GetLastError();
     Print("error: can't create Arrow! code #",err," ",ErrorDescription(err));
     return;
    }
   else
   { 
   ObjectSet(ArrowName, OBJPROP_ARROWCODE, ArrowCode);
   ObjectSet(ArrowName, OBJPROP_COLOR , ArrowCollor);
   ObjectSet(ArrowName, OBJPROP_WIDTH  , 1);
   ObjectsRedraw();
   }
}

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- 
  SetArrow(Time[0],Open[0],164,White);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+



Kod experta, vyzyvajus4evo etot indikator 4erez iCustom() funkciju interfeisa:

//+------------------------------------------------------------------+
//|                                            BadObjects-expert.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//---- 
   int value;
   int value2;
   value=iCustom(Symbol(),0,"BadObjects",0,0);
   value2=iCustom(Symbol(),0,"BadObjects",1,0);
    
//----
   return(0);
  }
//+------------------------------------------------------------------+



Jiesli zapuskat' etot indikator napriamuju, vsio rabotajet. 4erez expert - net.


--------------------------------------------------------------------------------------------------------------

2) Metatrader crash dump jiesli ispolzovat' ObjectCreate() v biblioteke mql4, etot dump ot zapuska strategy tester(jiesli napriamuju na grafik, toze samoje, no patom kazdyj raz pri zapuske mt4 srazu crash):

There has been a critical error
Time : 2005.07.26 13:47
Program : Client Terminal
Version : 4.00 (build: 177, Jul 18 2005)
Owner : MetaQuotes Software Corp. (MetaTrader)
OS : Microsoft Windows 98
Processors : 2, type 586, level 6
Memory : 513864/214228 kb
Exception : E06D7363
Address : 404ADF00
Access Type : NA
Access Addr : 00000000

Registers : EAX=405258B0 CS=0073 EIP=404ADFA4 EFLGS=00200212
: EBX=40576320 SS=007b ESP=43426AA8 EBP=43426B40
: ECX=00000000 DS=007b ESI=43426B40 FS=003b
: EDX=00000008 ES=007b EDI=43426AC8 GS=0033

Stack Trace : 5F453A61 5F45A6A2 00000000 00000000
: 00000000 00000000 00000000 00000000
: 00000000 00000000 00000000 00000000
: 00000000 00000000 00000000 00000000
Modules :
1 : 00400000 002C8000 C:\Program Files\MetaTrader 4\terminal.exe
2 : 40190000 0006A000 c:\windows\system\ntdll.dll
3 : 40490000 000E8000 c:\windows\system\kernel32.dll
4 : 406E0000 0001B000 c:\windows\system\ws2_32.dll
5 : 40720000 0011A000 c:\windows\system\user32.dll
6 : 40850000 0007D000 c:\windows\system\gdi32.dll
7 : 408E0000 00031000 c:\windows\system\advapi32.dll
8 : 40920000 00011000 c:\windows\system\iphlpapi.dll
9 : 40940000 00074000 c:\windows\system\winmm.dll
10 : 409C0000 00008000 c:\windows\system\msimg32.dll
11 : 409E0000 000B6000 c:\windows\system\shell32.dll
12 : 40AA0000 000C2000 c:\windows\system\comctl32.dll
13 : 40B80000 00076000 c:\windows\system\ole32.dll
14 : 40C10000 00032000 c:\windows\system\rpcrt4.dll
15 : 40D50000 00076000 c:\windows\system\winex11.drv
16 : 41000000 0000D000 c:\windows\system\imm32.dll
17 : 41060000 00038000 c:\windows\system\wineoss.drv
18 : 410A0000 00012000 c:\windows\system\msacm.drv
19 : 410C0000 00017000 c:\windows\system\msacm32.dll
20 : 41200000 00005000 c:\windows\system\midimap.drv
21 : 41BC0000 00021000 c:\windows\system\uxtheme.dll
22 : 42620000 00083000 c:\windows\system\comdlg32.dll
23 : 426B0000 0001C000 c:\windows\system\winspool.drv
24 : 5F400000 000F2000 C:\windows\system\MFC42.DLL
25 : 65340000 00092000 C:\windows\system\OLEAUT32.dll
26 : 70BD0000 00065000 C:\windows\system\shlwapi.dll
27 : 78000000 00040000 C:\windows\system\MSVCRT.dll

Call stack :
404ADF00:0000 [404ADF00] ReadConsoleW [c:\windows\system\kernel32.dll]

Kod mojej biblioteki:


//+------------------------------------------------------------------+
//|                                                  badlib.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                            irc://irc.omnitel.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"

#property library

//---- input parameters
extern bool      Arrows=true;
#include <WinUser32.mqh>

#include <stdlib.mqh>


void SetArrow(datetime ArrowTime, double Price, double ArrowCode, color ArrowCollor)
{
 if (!Arrows || IsTesting())  return;
 int err;
 string ArrowName = TimeToStr(ArrowTime);
   if (ObjectFind(ArrowName) != -1) ObjectDelete(ArrowName);
   if(!ObjectCreate(ArrowName, OBJ_ARROW, 0, ArrowTime, Price))
    {
     err=GetLastError();
     Print("error: can't create Arrow! code #",err," ",ErrorDescription(err));
     return;
    }
   else
   {
   ObjectSet(ArrowName, OBJPROP_ARROWCODE, ArrowCode);
   ObjectSet(ArrowName, OBJPROP_COLOR , ArrowCollor);
   ObjectSet(ArrowName, OBJPROP_WIDTH  , 1);
   ObjectSetText(ArrowName,DoubleToStr(ArrowCode,1), 8, "Arial", ArrowCollor);
   ObjectsRedraw();
   }
}

double badlib()
  {
return(0);
}
//+------------------------------------------------------------------+



Kod include faila:

//+------------------------------------------------------------------+
//|                                                  badlib.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                            irc://irc.omnitel.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"
#import "badlib.ex4"

void SetArrow(datetime ArrowTime, double Price, double ArrowCode, color ArrowCollor);
double badlib();



Kod eksperta zapuskajes4evo funkciju badlib():

//+------------------------------------------------------------------+
//|                                          BadLibImport-expert.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                            irc://irc.omnitel.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"


#include <badlib.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//---- 
   int value;
   value=badlib();
    
//----
   return(0);
  }
//+------------------------------------------------------------------+



Kstate, po4emu nikto niotve4ajet iz kompaniji po mailami support@metaquotes.ru i po mailami moderatorov foruma? Takoje 4ustvo, 4to bagreporty kak v /dev/null po mailami ushli.. I jies4io moj akaunt otkliu4ili , prishlos&#180; sdelat' drugoj posle triox nedel zdanija otveta nad etim vaprosom "po4emu?" :(

 
на первый взгляд : в твоем индикаторе буферы не просчитываются, хотя и объявлено целых два, а в эксперте ты хочешь получить значения из этих буферов, а так здесь так много наворочено, что с ходу даже при желании трудно разобраться :)
 
на первый взгляд : в твоем индикаторе буферы не просчитываются, хотя и объявлено целых два, а в эксперте ты хочешь получить значения из этих буферов, а так здесь так много наворочено, что с ходу даже при желании трудно разобраться :)


Eto kuski koda, v katorovom u menia eti oshybki vylezli, na return() nismotri - sami funkciji po sebe v skompilirovannom MQL ploxo obrabatyvajutsia. Kompilirujetsia bez oshybok.

Gdie tam stack overflow ili 4to nibut' poxoze - tol'ko Metaquotes s debugerami MT4 mozet uznat' :-)
 
Privet,

Pokapalsia ja jies4io nad etim crashlogom i vot 4to uvidel:

Jiesli v biblioteke ispolzujetsia "extern bool variable;" - srazu crash!

vot moj kod biblioteki posle otslezovanija:


//+------------------------------------------------------------------+
//|                                                       badlib.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                            irc://irc.omnitel.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"

#property library

//---- input parameters
extern bool      Arrows=true;

double badlib()
  {   
return(0);
}
//+------------------------------------------------------------------+



Popravtie peredavajemyje global'nyje peremennyje na biblioteki MQL4 tak kak eto inogda nuzno peredavat' 4erez stack. 4erez GlobalVariableSet/Get - ni samyj lu4yj sposob dlia etoj situaciji, potomu lu4e iz indikatora takovo vroda sdelat' biblioteku.

Budu zdat' fixa :-)

 
Vot jies4io narvalsia na 1 oshybku:

Kokda ObjectCreate() sidit v biblioteke mql4 kak 4ast' funkciji, objety tipa arrow iz eksperta nirisujetsia kokda vyzyvaju etu funkciju.

Vot kod:

biblioteka badlib.mq4
//+------------------------------------------------------------------+
//|                                                       badlib.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                            irc://irc.omnitel.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"

#property library

#include <stdlib.mqh>
//---- input parameters
//extern bool      Arrows=true;

void SetArrow(datetime ArrowTime, double Price, double ArrowCode, color ArrowCollor)
{
 int err;
 string ArrowName = TimeToStr(ArrowTime);
   if (ObjectFind(ArrowName) != -1) ObjectDelete(ArrowName);
   if(!ObjectCreate(ArrowName, OBJ_ARROW, 0, ArrowTime, Price))
    {
     err=GetLastError();
     Print("error: can't create Arrow! code #",err," ",ErrorDescription(err));
     return;
    }
   else
   { 
   ObjectSet(ArrowName, OBJPROP_ARROWCODE, ArrowCode);
   ObjectSet(ArrowName, OBJPROP_COLOR , ArrowCollor);
   ObjectSet(ArrowName, OBJPROP_WIDTH  , 1);
   ObjectSetText(ArrowName,DoubleToStr(ArrowCode,1), 8, "Arial", ArrowCollor);
   ObjectsRedraw();
   }
}


void SetObject(string ObjName,int ObjType,datetime ObjTime1,double ObjPrice1,datetime ObjTime2=0,double ObjPrice2=0,color ObjColor=Red,int ObjSize=1,int ObjStyle=STYLE_SOLID,datetime ObjTime3=0,double ObjPrice3=0)
{
if (ObjectFind(ObjName) != -1) ObjectDelete(ObjName);
ObjectCreate(ObjName, ObjType, 0,ObjTime1 , ObjPrice1, ObjTime2, ObjPrice2, ObjTime3, ObjPrice3);
ObjectSet(ObjName,OBJPROP_COLOR,ObjColor); 
ObjectSet(ObjName,OBJPROP_STYLE,ObjStyle); 
ObjectSet(ObjName,OBJPROP_WIDTH,ObjSize); 
}

double badlib()
  {   
   int MaxPriceBar = Highest (NULL,0,MODE_HIGH,350,0);
   int MinPriceBar = Lowest (NULL,0,MODE_LOW,350,0);
   double MaxPrice = High[MaxPriceBar];
   double MinPrice = Low[MinPriceBar];
   double ret;
   SetObject("HIGH_PRICE",OBJ_TREND,Time[351],MaxPrice,Time[0],MaxPrice,Green,3,STYLE_SOLID);
   SetObject("LOW_PRICE",OBJ_TREND,Time[351],MinPrice,Time[0],MinPrice,Green,3,STYLE_SOLID);
   SetObject("TriangleEnd",OBJ_TREND,Time[0],MaxPrice,Time[0],MinPrice,Yellow,1,STYLE_DASHDOT);
	SetObject("MaxMinFibo",OBJ_FIBO,Time[0],MaxPrice,Time[MinPriceBar],MinPrice,Yellow,1,STYLE_DOT);
	ret=Open[0];
   //SetArrow(Time[0],ret,164,White);
return(ret);
}
//+------------------------------------------------------------------+



include fail badlib.mqh:

//+------------------------------------------------------------------+
//|                                                       badlib.mqh |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                            irc://irc.omnitel.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"
#import "badlib.ex4"

void SetArrow(datetime ArrowTime, double Price, double ArrowCode, color ArrowCollor);
double badlib();



Ekspert Badlib-Import-expert.mq4:

//+------------------------------------------------------------------+
//|                                          BadLibImport-expert.mq4 |
//|                           Copyright © 2005, Arunas Pranckevicius |
//|                                            irc://irc.omnitel.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Arunas Pranckevicius(T-1000), Lithuania"
#property link      "irc://irc.omnitel.net/forex"


#include <badlib.mqh>

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//---- 
   int value;
   value=badlib();
   SetArrow(Time[0],value,164,White);
//----
   return(0);
  }
//+------------------------------------------------------------------+



Jiesli otkomentirovat' stroku s vyzovom na funkciju v samoj biblioteki - arrows risujetsia, a jiesli vot tak ostavit' - nirisujetsia. Paprobuite sami, uvidite.

I xorosho bylo by mne poobs4iatsia s developerami Metaquotes, a to vsiakije bagi vot tak postit' medlenno polu4iajetsia.. :)
ICQ #82980261

 
Privet,

Slawa, Renat, kakaja tekus4iaja situacija nad etimi oshybkami?

Nixo4etsia postit' oshybki vot tak v pustuju...

P.S> Zavtra ujeszaju na more, u menia kanikuly, budu 4erez 2 nedeli:-)
 
будем разбираться. спасибо, что напомнили
Причина обращения: