- Передать одно значение из Custom индикатора в Советник.
- Как использовать COM объекты в MQL ?
- Вопросы от начинающих MQL5 MT5 MetaTrader 5
Нужно мне читать (и писать) данные из (в) системного реестра. В качестве примера взято чтение значение ветки реестра, с именем папки "Мои документы" для текущего пользователя. Есть работающий код в VBA. Есть его "перевод" в MQL. Но что то там не так с передачей параметров :( Скрипт при открытии ключа реестра возвращает ошибку ERROR_INVALID_PARAMETER = 87 Скорее всего строка с именем ключа и значения передается в DLL как-то не правильно. Помогите довести скрип до рабочего состояния. Во вложенном архиве 3 файла: ReadRegistry.bas - исходник VBA ReadRegistry.mq4 - исходник MQL ReadRegistry.xls - EXCEL-евский файл с работающим макросом (ReadRegistry.bas)
Можно использовать API
Можно использовать API
Спасибо за содержательный совет :D .... Именно его то я и использую, однако вся беда в том что он не хочет использоваться правильно ;)В VBA - все работает правильно, а в MQL - нет.
Может быть вместо ........
....Вобщем больше поле для экспериментов.
Ох-ох-ох... Все правильно - именно в этом направлении нужно копать. Вся беда в том, что отличии от моего отличного знания MQL, с dll и особенностями системного програмирования связанного с ним у меня туго :( Все что мог я уже сделал и наэкспериментировался "по самое немогу".
Именно поэтому я обратился за помощью к сообществу - тот кто ЗНАЕТ как нужно сделать - просто поправит текст и сделает все за почасика (я надеюсь). Я уже видел нечто то похожее (использование win32 API в MQL для чтения INI-файлов, но там немного проще с параметрами). Вот на таких знатоков и надеюсь.
А ларчик просто запирается ;) Вот что написано в документации MQL:
int - Внутреннее представление - длинное целое число размером
4 байта.
Целые константы могут принимать значения от -2147483648 до 2147483647.
Если константа превышает указанный диапазон, то результат не
определен.
Значение передаваемой константы 0x80000002 (HKEY_LOCAL_MACHINE) составляет 2147483650 что больше предельно допустимого.
Нет видать в MQL БЕЗзнакового целого :(
2147483647 = 0x7FFFFFFF
Кто нибудь знает как сформировать 4 байта с содержимым 0x80000002
(беззнаковое целое) и передать их во внешнюю функцию ?
нечто вроде:
string HomeKey[4]; HomeKey[0]=CharToStr(0x0); HomeKey[1]=CharToStr(0x2); HomeKey[2]=CharToStr(0x80); HomeKey[3]=CharToStr(0x0);
Как вариант выхода из этого тупика могу предложить использовать
свою DLL, в которую передавать только наименование ветки реестра
и наименование параметра, а константу HKEY_LOCAL_MACHINE использовать
только внутри DLL и не гонять её через MQL4.
А ларчик просто запирается ;) Вот что написано в документации MQL:
int - Внутреннее представление - длинное целое число размером
4 байта.
Целые константы могут принимать значения от -2147483648 до 2147483647.
Если константа превышает указанный диапазон, то результат не
определен.
Значение передаваемой константы 0x80000002 (HKEY_LOCAL_MACHINE) составляет 2147483650 что больше предельно допустимого.
Нет видать в MQL БЕЗзнакового целого :(
2147483647 = 0x7FFFFFFF
Кто нибудь знает как сформировать 4 байта с содержимым 0x80000002
(беззнаковое целое) и передать их во внешнюю функцию ?
Тогда в переменной не передавть константу, а сразу указывать ее при вызове функции API.
А ларчик просто запирается ;) ...
Еще один возможный глюк в передаче - это передача строки в виде строки в формате ASCII (по одному байту на символ) или UNICODE (по 2). Я правда пробовал и RegOpenKeyW + RegQueryValueExSW (для UNICODE), но все равно получал теже самые 87.
И самый последний вариант непонятностей: передача строки в паксалевском (длинна строки + символы строки) формате или Сишном (символы строки заканчивающиеся нулем).
Стандартные грабли при описании строки с директорием (с обратным слешем) на языках C, C++ и им подобным.
Строка "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" должна на самом деле выглядеть так
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
СЛЕШ ДОЛЖЕН БЫТЬ ДВОЙНЫМ!!! читайте доки, ибо они - рулез
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования