Stack damaged, check DLL function call

 

build 430

 Были обновление сообщение об ошибке.

Stack damaged, check DLL function call 

#import "user32.dll"
bool      GetWindowRect(long hWnd,int &Pos[]);
#import

int rect[4];


hwnd=ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE);

GetWindowRect(hwnd,rect);  //Stack damaged, check DLL function call
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 

Только что проверил в 430 билде в Windows 7 x64:

#import "user32.dll"
bool      GetWindowRect(long hWnd,int &Pos[]);
#import
void OnTick()
  {
   int rect[4];

   long hwnd=ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE);
   if(hwnd)
     {
      if(GetWindowRect(hwnd,rect))
        {
         Print("#",hwnd," ",rect[0]," ",rect[1]," ",rect[2]," ",rect[3]);
        }
     }
  }

все работает нормально:

2011.04.15 21:28:29     Empty (EURUSD,D1)       #396654 297 163 1169 797
2011.04.15 21:28:33     Empty (EURUSD,D1)       #396654 297 163 1169 768    <- видно новый размер после смены размера окна

Может стек повреждается от какой-то другой DLL функции?
 

Windows 7 x64:

Проблема в том "MetaTrader 5 - 32bit"

 
FinGeR:

Windows 7 x64:

Проблема в том "MetaTrader 5 - 32bit"

Установите MetaTrader 5 x64, если думаете, что именно в этом проблема.... В чём я не уверен...
 

Я просмотрел параметры - ошибка была в том, что Вы в прототипе функции указали long hWnd вместо int hWnd.  В результате передавалось 8 байт вместо 4.

Среда исполнения MQL5 следит за корректностью стека, поэтому обнаруживает такие ошибки.

Вот правильный рабочий вариант - он работает и в 32 и 64 битной версиях:

#import "user32.dll"
bool      GetWindowRect(int hWnd,int &Pos[]);
#import
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int rect[4];

   int hwnd=(int)ChartGetInteger(ChartID(),CHART_WINDOW_HANDLE);
   if(hwnd)
     {
      if(GetWindowRect(hwnd,rect))
        {
         Print("#",hwnd," ",rect[0]," ",rect[1]," ",rect[2]," ",rect[3]);
        }
     }

  }
Документация по MQL5: Основы языка / Функции
Документация по MQL5: Основы языка / Функции
  • www.mql5.com
Основы языка / Функции - Документация по MQL5
 
Настоятельно рекомендую на x64 системах использовать 64 битную версию терминала.
 
Renat:
Настоятельно рекомендую на x64 системах использовать 64 битную версию терминала.
И это логично по сути...
 
Спасибо.
 

Возникла аналогичная ошибка в .dll. Пытаюсь максимально упростить, типы параметров в прототипе простые. В MT4 работает стабильно.

Вопрос следующий: принимает ли СервисДеск для рассмотрения заявки с приложением файла(ов) .dll без исходного С/С++ кода?

 
К сожалению, нет.
Причина обращения: