Только что проверил в 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"
Windows 7 x64:
Проблема в том "MetaTrader 5 - 32bit"
Я просмотрел параметры - ошибка была в том, что Вы в прототипе функции указали 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]); } } }
- www.mql5.com
Настоятельно рекомендую на x64 системах использовать 64 битную версию терминала.
Возникла аналогичная ошибка в .dll. Пытаюсь максимально упростить, типы параметров в прототипе простые. В MT4 работает стабильно.
Вопрос следующий: принимает ли СервисДеск для рассмотрения заявки с приложением файла(ов) .dll без исходного С/С++ кода?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
build 430
Были обновление сообщение об ошибке.
Stack damaged, check DLL function call