Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Торгуй как успешные трейдеры - подпишись на их сигналы!
Vadim Zhunko
5226
Vadim Zhunko 2008.11.19 12:04 

Библиотеки тут.

Все файловые функции построены на рекомендуемых функциях WinAPI.

Т.е. будут работать под 64-битными системами.

В комплекте есть универсальные функции. По принципу всё в одном флаконе (открыть-создать, сместить файловый указатель, записать-прочитать-дописать, закрыть).

Всё это благодаря помощи Ильнура. Качайте!

bank
848
bank 2008.11.19 12:17  

спасибо!

еще радует что Планируется сделать комплект функций для работы с CSV-файлами.

Vadim Zhunko
5226
Vadim Zhunko 2008.11.19 12:45  
Желательно их потестировать ещё.
Sergey Kravchuk
3330
Sergey Kravchuk 2008.11.19 12:50  

Спасибо!!!

А не ужели все, что есть в WinKernel32.mqh проверялось на работоспособность?! Вопрос не праздный: очень многие функции передают некоторые свои параметры по ссылке а не по значению. В этом случае в описаниях должны быть конструкции типа int& или int param[]. Я же насчитал на 765 срочек кода только 10 шт "int&" и все они связаны с файловыми операциями. А остальные?

Vadim Zhunko
5226
Vadim Zhunko 2008.11.19 13:35  
ForexTools >>:

Спасибо!!!

А не ужели все, что есть в WinKernel32.mqh проверялось на работоспособность?! Вопрос не праздный: очень многие функции передают некоторые свои параметры по ссылке а не по значению. В этом случае в описаниях должны быть конструкции типа int& или int param[]. Я же насчитал на 765 срочек кода только 10 шт "int&" и все они связаны с файловыми операциями. А остальные?

Уже не помню откуда этот список. Помню, что Сергей Мурзинов дал его, как самый подходящий для редактирования под MQL4.

Все функции из WinKernel32.mqh, конечно, не проверялись. Те, которые используются, работают.

Может народ будет пользоваться и дополнять или удалять из этого списка. Будем надеятся, что поделяться информацией.

Eduard
235
Eduard 2008.11.19 14:03  

самое очевидное GetLastError нельзя использовать ( она закоментарена в WinKernel32.mqh )

поэтому выяснить причину ошибки (файл не существует или там еще что) при вызове функции без посторонней DLL библиотеки не представляется возможным

таким образом использование многих функций возможно только в идеальных условиях

Sergey Kravchuk
3330
Sergey Kravchuk 2008.11.19 15:16  
Zhunko >>:

Все функции из WinKernel32.mqh, конечно, не проверялись. Те, которые используются, работают.

Может народ будет пользоваться и дополнять или удалять из этого списка. Будем надеятся, что поделяться информацией.

Может тогда файл имеет смысл перекомпоновать? В самый верх перенести те, что проверены и работают а остальные отделить линией с предупреждением что все что ниже по списку - не проверялось. По себе сужу: взял я както раз такое описание одной функции, подставил в код и попытался поработать... Сколько матов на самого себя наматерил, когда через пару дней проломился что нужно было передавать не int а int param[] и это должна быть не просто int-переменная а массив param из одного int-элемента, а с передачей строк - там вообще караул :((

Сергей Мурзинов
159
Сергей Мурзинов 2008.11.19 15:23  
TedBeer >>:

самое очевидное GetLastError нельзя использовать ( она закоментарена в WinKernel32.mqh )

поэтому выяснить причину ошибки (файл не существует или там еще что) при вызове функции без посторонней DLL библиотеки не представляется возможным

таким образом использование многих функций возможно только в идеальных условиях

Многие функции в случае ошибки возвращают -1 Этим мона пользоваться

ForexTools >>:

Может тогда файл имеет смысл перекомпоновать? В самый верх перенести те, что проверены и работают а остальные отделить линией с предупреждением что все что ниже по списку - не проверялось. По себе сужу: взял я както раз такое описание одной функции, подставил в код и попытался поработать... Сколько матов на самого себя наматерил, когда через пару дней проломился что нужно было передавать не int а int param[] и это должна быть не просто int-переменная а массив param из одного int-элемента, а с передачей строк - там вообще караул :((


Заголовочный файл можно компоновать как угодно и в том числе повыкидывать из него не нужное

Vadim Zhunko
5226
Vadim Zhunko 2008.11.19 15:31  
ForexTools >>:

Может тогда файл имеет смысл перекомпоновать? В самый верх перенести те, что проверены и работают а остальные отделить линией с предупреждением что все что ниже по списку - не проверялось. По себе сужу: взял я както раз такое описание одной функции, подставил в код и попытался поработать... Сколько матов на самого себя наматерил, когда через пару дней проломился что нужно было передавать не int а int param[] и это должна быть не просто int-переменная а массив param из одного int-элемента, а с передачей строк - там вообще караул :((

Можно.

Там функции с коментариями, это, которые проверялись. Без коментариев не проверялись.

Все функции по алфавиту расставлены. Для удобства поиска.

Vadim Zhunko
5226
Vadim Zhunko 2008.11.19 15:33  
TedBeer >>:

самое очевидное GetLastError нельзя использовать ( она закоментарена в WinKernel32.mqh )

поэтому выяснить причину ошибки (файл не существует или там еще что) при вызове функции без посторонней DLL библиотеки не представляется возможным

таким образом использование многих функций возможно только в идеальных условиях

Можно ошибку получить без библиотеки DLL.

В комплекте есть функции под MQL4, которые это делают. Ильнур посторался.

Ilnur Iksanov
5679
Ilnur Iksanov 2008.11.19 18:19  
TedBeer >>:

самое очевидное GetLastError нельзя использовать ( она закоментарена в WinKernel32.mqh )

поэтому выяснить причину ошибки (файл не существует или там еще что) при вызове функции без посторонней DLL библиотеки не представляется возможным

таким образом использование многих функций возможно только в идеальных условиях

Да, действительно, GetLastError() нельзя использовать в MQL4 для получения кода системных ошибок при работе с функциями WinAPI. Однако такая возможность все таки существует!

Вместо GetLastError() можно использовать более низкоуровневую функцию RtlGetLastWin32Error(), экспортируемую из ntdll.dll. Правда перед вызовом какой-либо системной функции,

результат работы которой нужно контролировать, необходимо сбрасывать код ошибки установленный самой последней неудавшейся функцией. Это можно сделать путем вызова

RtlSetLastWin32Error(), экспортируемой также из ntdll.dll.

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

#import "ntdll.dll"
   int RtlGetLastWin32Error();
   int RtlSetLastWin32Error(int dwErrCode);
#import

int start()
{
   int dwErrCode;

   RtlSetLastWin32Error(0); //сбрасываем последний код ошибки
   //
   // Здесь осуществляется вызов какой-либо системной функции
   //
   if(Вызов системной функции завершился неудачей)
   {
      dwErrCode = RtlGetLastWin32Error();
      Print("Ошибка вызова системной функции. Код ошибки: ",dwErrCode);
   }
   return(0);
}

Библиотека файловых функций, которые выложил Вадим, содержит такой механизм контроля системных ошибок.

Поэтому использование этих функций возможно в реальных условиях!

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий