Здесь подсказали, что при вызове dll из MQL5 вместо string переменной нужно передавать массив char.
Но если делаю так:
получаю ошибку
ERROR_ACCESS_DENIED5 (0x5)
Access is denied.
Если переделывать в массив, то нужно использовать массив wchar, а не char. В этом случае нужна функция StringToShortArray. Хотя string - это и есть массив wchar. Разве что с типом доступа, не позволяющим его модификацию.
тут уж одно из двух, или string и CreateDirectoryW или char[] и просто CreateDirectory
Ihor Herasko:
Если переделывать в массив, то нужно использовать массив wchar, а не char. В этом случае нужна функция StringToShortArray. Хотя string - это и есть массив wchar. Разве что с типом доступа, не позволяющим его модификацию.
Переделал в char, так как подсказали.
А вот если делать "CreateDirectory" то такой функции нет:
2018.05.29 09:57:23.871 WinAPI (GBPUSD,H1) Cannot find 'CreateDirectory' in 'kernel32.dll'
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Работает!
Теперь другой вопрос: как засунуть во входной параметр переменную среды %USERNAME% ? Вариант
не проходит
мало того что не проходит, так это ещё и неправильно :-)
%USERNAME% не имеет отношения к каталогам. Они могут иметь несвязанные имена
за "домашний каталог" отвечают %HOMEDRIVE% %HOMEPATH% , за данные приложений %APPDATA% %LOCALAPPDATA%
PS/ (сам себя не похвалишь, как оплёванный ходишь). Вот отчасти чтобы не исполнять такие "танцы с бубнами" воткнул в 4-ку tcl.
Print("Error mkdir :"+tcl.StringResult());
}
доотлаживаю в 4-ке, портирую на 5-ку. Там в принципе только размеры указателей отличаются
мало того что не проходит, так это ещё и неправильно :-)
%USERNAME% не имеет отношения к каталогам. Они могут иметь несвязанные имена
за "домашний каталог" отвечают %HOMEDRIVE% %HOMEPATH% , за данные приложений %APPDATA% %LOCALAPPDATA%
PS/ (сам себя не похвалишь, как оплёванный ходишь). Вот отчасти чтобы не исполнять такие "танцы с бубнами" воткнул в 4-ку tcl.
Print("Error mkdir :"+tcl.StringResult());
}
доотлаживаю в 4-ке, портирую на 5-ку. Там в принципе только размеры указателей отличаются
Про %USERNAME% это был попутный вопрос. Сейчас главное - это правильно написать создание папки #10
Про %USERNAME% это был попутный вопрос. Сейчас главное - это правильно написать создание папки #10
про п 10 - "ненужный параметр" объявить как long и приравнять к 0. получится "Си-шный" NULL :-)
Всё работает.
Папка создаётся )))
А какая у Вас операционная система? У меня
на
не работает
А какая у Вас операционная система? У меня
на
не работает
А зачем вы wchar переделали ?
тут уж одно из двух, или string и CreateDirectoryW или char[] и просто CreateDirectory
Здесь подсказали, что при вызове dll из MQL5 вместо string переменной нужно передавать массив char.
Но если делаю так:
получаю ошибку
ERROR_ACCESS_DENIED5 (0x5)Access is denied.
Если переделывать в массив, то нужно использовать массив wchar, а не char. В этом случае нужна функция StringToShortArray. Хотя string - это и есть массив wchar. Разве что с типом доступа, не позволяющим его модификацию.
А зачем вы wchar переделали ?
тут уж одно из двух, или string и CreateDirectoryW или char[] и просто CreateDirectory
Если переделывать в массив, то нужно использовать массив wchar, а не char. В этом случае нужна функция StringToShortArray. Хотя string - это и есть массив wchar. Разве что с типом доступа, не позволяющим его модификацию.
Переделал в char, так как подсказали.
А вот если делать "CreateDirectory" то такой функции нет:
Переделал в char, так как подсказали.
А вот если делать "CreateDirectory" то такой функции нет:
CreateDirectoryA. Только для нее нужен массив char.
Из описания CreateDirectory следует, что второй параметр (опциональный) нужно передавать как NULL (не MQL5 NULL, а c++ NULL)
чтобы это соответствовало c++ NULL.
1) Тут точно нужна ссылка? Как по мне, просто 0 передать по значению и все.
2) Вы используете Unicode версию CreateDirectory, зачем передавать массив чаров? Возможно проще передавать string из MQL по ссылке.
Sergey Dzyublik:
Тут точно нужна ссылка?
Как по мне, просто 0 передать по значению и все.
Ну я пробовал и ссылку и просто ноль. Не работает в связке с массивом char.