Когда есть в коде импортированные функции из внешних библиотек DLL, то терминал вылетает если заходишь в функцию советника, в которой используется эта внешняя функция из DLL.
Поясню на примере - терминал вылетает и отладка
прекращается когда захожу отладчиком в функцию WriteFile():
#import "kernel32.dll"
int _lopen(string PathName,int ReadWrite);
int _lcreat(string PathName,int Attribute);
int _llseek(int FileHandle,int Offset,int Origin);
int _lread(int FileHandle,string Buffer,int Bytes);
int _lwrite(int FileHandle,string Buffer,int Bytes);
int _lclose(int FileHandle);
bool DeleteFileA(string PathName);
#import
int WriteFile(string FileName,string str)
{
int error;
int strlen=StringLen(str);
DeleteFileA(FileName);
int handle=_lcreat(FileName,0);
if(handle<0)
{
Print("Ошибка создания файла ",FileName);
return(-1);
}
error=_lwrite(handle,str,strlen);
if(error<0) Print("Ошибка записи в файл ",FileName," ",strlen,"
байт");
error=_lclose(handle);
if(error<0) Print("Ошибка закрытия файла ",FileName);
return(error);
}
Код выдрал из своего же советника на MQL4 и этот код там работает, однако в MQL5 почему-то файл не создается, не пойму почему (может у меня ошибка?).
Компилятор на код не
ругается.
З.Ы.
Елки-палки сделайте стилизатор настраиваемым!
Ну очень не нравится мне как он фигурные скобки расставляет и не хочу я вот это перед каждым циклом:
//+------------------------------------------------------------------+
//|
|
//+------------------------------------------------------------------+
и еще хочу пробелы впереди и сзади "=" чтобы читабельней было :)
И еще очень хочется в режиме отладчика всплывающие подсказки с текущим значением переменной или выражения когда к ним мышку подносишь,
а то каждый раз приходится в watchlist заносить. Да и еще в самом вочлисте значения не меняются у переменных (не нашел).Что-то мой собственный пост не редактируется, поэтому запостил заново. В улучшенном варианте :)
Пользуйтесь, пожалуйста, возможностями редактора для удобного форматирования кода. Рекомендую статью MQL5 Community - Памятка пользователя
Существенно упростил код и перешел на штатные функции работы с файлами.
И все равно МетаТрейдер вылетает когда заходишь вот в эту функцию отладчиком.
int WriteFile(string FileName,string str)
{
int handle=FileOpen("1.txt",FILE_WRITE|FILE_TXT|FILE_COMMON);
FileWrite(handle,str);
FileClose(handle);
return(0);
}
Что не так?
---------------
Спустя 5 минут...
Оппана! Убрал параметр FileName и все заработало! Как это так? Параметр ведь вообще нигде не использовался!
int WriteFile(string str)
{
int
handle=FileOpen("1.txt",FILE_WRITE|FILE_TXT|FILE_COMMON);
FileWrite(handle,str);
FileClose(handle);
return(0);
}
DrDemon:
Поясню на примере - терминал вылетает и отладка прекращается когда захожу отладчиком в функцию WriteFile():
забудьте про 16 битные низкоуровневые операции с файлами. Есть намного красивее и лучшее решение!
#import "Kernel32.dll" bool MoveFileExW(string &lpExistingFileName, string &lpNewFileName, int dwFlags); bool CopyFileW(string &lpExistingFileName, string &lpNewFileName, bool bFailIfExists); #import
и так далее... весь набор для работы!
http://msdn.microsoft.com/en-us/library/aa365747%28VS.85%29.aspx
PS. кстати - строки передавать надо по ссылке
Спасибо за сообщение, ошибка в хранении отладочной инфы для параметров функций исправлена.
Спасибо за помощь...
Похоже, что эти функции теперь не работают:
#import "kernel32.dll" int _lopen (string path, int of); int _lcreat (string path, int attrib); int _llseek (int handle, int offset, int origin); int _lread (int handle, string buffer, int bytes); int _lclose (int handle); bool DeleteFileA(string fileName); #import
Люди подскажите рабочие функции, может у кого-нибудь есть маааленькая библиотечка для работы с файлами через WINAPI ?
Спасибо за помощь...
Похоже, что эти функции теперь не работают:
Люди подскажите рабочие функции, может у кого-нибудь есть маааленькая библиотечка для работы с файлами через WINAPI ?
я вам сообщением выше написал. видели?
Да видел, спасибо. Только не пойму как эти функции описать в MQL, а именно как сопоставить типы параметров при импорте. Буду разбираться.
Получается, что если string в MQL5 юникодные, то нужно использовать юникодные версии функций WINAPI, например CreateFileW? Ансишные версии уже не будут работать? Я правильно понял?
А если все же нужно будет передать во внешнюю функцию ансишную строку (неюникодовскую), то можно ли преобразовать строку unicode в ansi?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Когда есть в коде импортированные функции из внешних библиотек DLL, то терминал вылетает если заходишь в функцию советника, в которой используется эта внешняя функция из DLL.
Поясню на примере - терминал вылетает и отладка прекращается когда захожу отладчиком в функцию WriteFile():
#import "kernel32.dll"
int _lopen(string PathName,int ReadWrite);
int _lcreat(string PathName,int Attribute);
int _llseek(int FileHandle,int Offset,int Origin);
int _lread(int FileHandle,string Buffer,int Bytes);
int _lwrite(int FileHandle,string Buffer,int Bytes);
int _lclose(int FileHandle);
bool DeleteFileA(string PathName);
#import
int WriteFile(string FileName,string str)
{
int error;
int strlen=StringLen(str);
DeleteFileA(FileName);
int handle=_lcreat(FileName,0);
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
if(handle<0)
{
Print("Ошибка создания файла ",FileName);
return(-1);
}
error=_lwrite(handle,str,strlen);
if(error<0) Print("Ошибка записи в файл ",FileName," ",strlen," байт");
error=_lclose(handle);
if(error<0) Print("Ошибка закрытия файла ",FileName);
return(error);
}
Код выдрал из своего же советника на MQL4 и этот код там работает, однако в MQL5 почему-то файл не создается, не пойму почему (может у меня ошибка?).
Компилятор на код не ругается.
З.Ы.
Елки-палки сделайте стилизатор настраиваемым!
Ну очень не нравится мне как он фигурные скобки расставляет и не хочу я вот это перед каждым циклом:
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
и еще хочу пробелы впереди и сзади "=" чтобы читабельней было :)
И еще очень хочется в режиме отладчика всплывающие подсказки с текущим значением переменной или выражения когда к ним мышку подносишь,
а то каждый раз приходится в watchlist заносить. Да и еще в самом вочлисте значения не меняются у переменных (не нашел).