Новые библиотеки файловых функций без ограничений.

 

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

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

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

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

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

 

спасибо!

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

 
Желательно их потестировать ещё.
 

Спасибо!!!

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

 
ForexTools >>:

Спасибо!!!

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

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

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

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

 

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

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

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

 
Zhunko >>:

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

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

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

 
TedBeer >>:

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

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

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

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

ForexTools >>:

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


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

 
ForexTools >>:

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

Можно.

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

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

 
TedBeer >>:

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

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

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

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

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

 
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);
}

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

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