попробуйте варианты
1. сделать объявление string s=" ";
2. передавать string lpBuffer без адреса
sergeev, Zhunko огромное спасибо! :) Подразумеваю, что буква M в названии языка означает "Магический". Проблема отчасти была в том, что под переменную s не выделено достаточно памяти. Есть ли возможность это сделать? Чтобы было примерно так: setLength(s, 256);
Алексей уже написал, как это сделать!
string s=" ";
В моей библиотеке строки "возвращаются". Заморачиваться с буферами не надо.
Но такое решение называется "сделал на коленке". В принципе, понятно, по-человечески не получится сделать :D
if (GlobalGetAtomNameA(i, s, 128) == 0) continue;
А это надо, чтобы удалённые атомы не читались :) (если кому пригодится)
Но такое решение называется "сделал на коленке". В принципе, понятно, по-человечески не получится сделать :D
Абдула, правила диктую не я а майкрософт.
вам MSDN родным английский языком пишет, что третий параметр в GlobalGetAtomName - размер буфера, куда вы собираетесь принять данные.
и чему же у вас равен этот самый размер буфера? нулю?
Так и я про что :)
Как мне его задать по человечески? ИМХО, вот это:
s := " ";
самое убогое решение, что я когда либо видел :) но я понял, что по другому никак в mql нельзя.
Абдула, правила диктую не я а майкрософт.
вам MSDN родным английский языком пишет, что третий параметр в GlobalGetAtomName - размер буфера, куда вы собираетесь принять данные.
Не подумайте, что я в вашу сторону это написал :)
Просто, например, как я это делаю в delphi:
var p: PAnsiChar; begin GetMem(p, 256); // вот как я выделяю память. А как это в mql сделать - хрен бы его знал :( if GlobalGetAtomNameA(MyAtomIndex, p, 255) <> 0 then result := StrPas(p) else result := ''; FreeMem(p); end;
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Приветствую!
Возникла потребность передачи данных извне, и моим выбором были атомы - в моём случае это самый удобный. Но функция GlobalGetAtomNameA напрочь отказывается работать, выдаёт мне такие строки в log:
function 'GlobalGetAtomNameA' call from dll 'kernel32.dll' critical error c0000005 at 77276ADE.
Вот код:
Помогите разобраться, пожалуйста! Версия терминала: 4.00 build 445