Всем привет!
Да, такие вопросы уже явно встречались. Поиском сам нашел много интересных тем (https://www.mql5.com/ru/forum/145702/page2 - наиболее интересная и подробная из них). Но я эту проблему упорно победить не могу.
Итак.
Что имеется: Metatrader 4 и Visual Studio 2005.
Что нужно: написать на С++ dll, функции которой потом импортировать и использовать в советнике.
В чем проблема: при подключении написанной dll советник выдает ошибку 126, что не может эту dll открыть. Следовательно все функции тоже не импортируются.
При чем на С++ я эту dll ради интереса пробовал подключать из тестового приложения - все ок. Решил проблему начать решать с самых низов. Создал с нуля шаблонный проект в VS2005 (Win32 Console Application библиотека DLL с параметрами по умолчанию)
Первым делом в настройках проекта для всех конфигураций поставил свойство Runtime Library в значение MT (чтобы в саму dll при компиляции засовывались все внешние зависимости - это первый совет, который всегда бывает при возникновении такой ошибки)
Depends Walker (второй по популярности совет при этой ошибке) никаких ошибок не выдает, показывает только зависимость от kernel32.dll (ядро Винды - есть на любом компе). Если не выставлять в предыдущем пункте MT, то появляется зависимость от рантайма 2005 студии - msvcr80.dll.
В код dll ВООБЩЕ ничего не добавлял. Оставил только то, что по шаблону студия сгенерила. И все равно при попытке импорта этой dll из советника выдается ошибка Cannot load 'Test.dll' [126] в закладке Эксперты терминала MT4. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.
Всем привет!
Да, такие вопросы уже явно встречались. Поиском сам нашел много интересных тем (https://www.mql5.com/ru/forum/145702/page2 - наиболее интересная и подробная из них). Но я эту проблему упорно победить не могу.
Итак.
Что имеется: Metatrader 4 и Visual Studio 2005.
Что нужно: написать на С++ dll, функции которой потом импортировать и использовать в советнике.
В чем проблема: при подключении написанной dll советник выдает ошибку 126, что не может эту dll открыть. Следовательно все функции тоже не импортируются.
При чем на С++ я эту dll ради интереса пробовал подключать из тестового приложения - все ок. Решил проблему начать решать с самых низов. Создал с нуля шаблонный проект в VS2005 (Win32 Console Application библиотека DLL с параметрами по умолчанию)
Первым делом в настройках проекта для всех конфигураций поставил свойство Runtime Library в значение MT (чтобы в саму dll при компиляции засовывались все внешние зависимости - это первый совет, который всегда бывает при возникновении такой ошибки)
Depends Walker (второй по популярности совет при этой ошибке) никаких ошибок не выдает, показывает только зависимость от kernel32.dll (ядро Винды - есть на любом компе). Если не выставлять в предыдущем пункте MT, то появляется зависимость от рантайма 2005 студии - msvcr80.dll.
В код dll ВООБЩЕ ничего не добавлял. Оставил только то, что по шаблону студия сгенерила. И все равно при попытке импорта этой dll из советника выдается ошибка Cannot load 'Test.dll' [126] в закладке Эксперты терминала MT4. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.
У MQ есть шаблон проекта под длл, там фишка в том, что надо указать все видимые функции в файле .def. А такого анахронизма студии давно не делают.
Советую взять за основу этот древний пример, 2005 его переконвертит в свой формат
----------
ЗЫ: лучше 2015
пользуюсь embarcadero никаких проблем с библиотеками нет, при переносе на другой комп также
чтобы сказать в чем ошибка прикрепите свой файл тест
такое может возникать например когда ВЫ неправильно указали типы переменных в вызове длл - я когда то долго искал причину этой ошибки.
да и кстати Вы куда эту бибилотеку кидаете в какую папку?
Ошибка 126 появляется чаще всего тогда, когда подключаемая длл зависит от другой а другая отсутствует.
Надо dependency walker и посмотреть зависиомсти вашей длл. 90% что это crt либа от студии
У MQ есть шаблон проекта под длл, там фишка в том, что надо указать все видимые функции в файле .def. А такого анахронизма студии давно не делают.
Советую взять за основу этот древний пример, 2005 его переконвертит в свой формат
----------
ЗЫ: лучше 2015
Ошибка 126 появляется чаще всего тогда, когда подключаемая длл зависит от другой а другая отсутствует.
Надо dependency walker и посмотреть зависиомсти вашей длл. 90% что это crt либа от студии
пользуюсь embarcadero никаких проблем с библиотеками нет, при переносе на другой комп также
чтобы сказать в чем ошибка прикрепите свой файл тест
такое может возникать например когда ВЫ неправильно указали типы переменных в вызове длл - я когда то долго искал причину этой ошибки.
да и кстати Вы куда эту бибилотеку кидаете в какую папку?
Всем привет!
Да, такие вопросы уже явно встречались. Поиском сам нашел много интересных тем (https://www.mql5.com/ru/forum/145702/page2 - наиболее интересная и подробная из них). Но я эту проблему упорно победить не могу.
Итак.
Что имеется: Metatrader 4 и Visual Studio 2005.
Что нужно: написать на С++ dll, функции которой потом импортировать и использовать в советнике.
В чем проблема: при подключении написанной dll советник выдает ошибку 126, что не может эту dll открыть. Следовательно все функции тоже не импортируются.
При чем на С++ я эту dll ради интереса пробовал подключать из тестового приложения - все ок. Решил проблему начать решать с самых низов. Создал с нуля шаблонный проект в VS2005 (Win32 Console Application библиотека DLL с параметрами по умолчанию)
Первым делом в настройках проекта для всех конфигураций поставил свойство Runtime Library в значение MT (чтобы в саму dll при компиляции засовывались все внешние зависимости - это первый совет, который всегда бывает при возникновении такой ошибки)
Depends Walker (второй по популярности совет при этой ошибке) никаких ошибок не выдает, показывает только зависимость от kernel32.dll (ядро Винды - есть на любом компе). Если не выставлять в предыдущем пункте MT, то появляется зависимость от рантайма 2005 студии - msvcr80.dll.
В код dll ВООБЩЕ ничего не добавлял. Оставил только то, что по шаблону студия сгенерила. И все равно при попытке импорта этой dll из советника выдается ошибка Cannot load 'Test.dll' [126] в закладке Эксперты терминала MT4. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.
ненашлись библиотеки CRT (оригиналы лежат в каталоге студии по пути VC/redist/x86 и x64 соотв.). Достаточно скопировать требуемые в один каталог с вашей DLL. Иначе даже на машине разработчика они могут неподхватиться
Можно похорошему их ставить клиентам через официальную и бесплатную установку с сайта Microsoft, но так почему-то невсегда работает :-)
ненашлись библиотеки CRT (оригиналы лежат в каталоге студии по пути VC/redist/x86 и x64 соотв.). Достаточно скопировать требуемые в один каталог с вашей DLL. Иначе даже на машине разработчика они могут неподхватиться
Можно похорошему их ставить клиентам через официальную и бесплатную установку с сайта Microsoft, но так почему-то невсегда работает :-)
Про эти библиотеки я писал (установил свойство проекта Runtime Library в значение MT - они уже "вшиться" таким образом должны в выходную dll). Dependency Walker зависимость после утановки этого свойства от рантаймов показывать перестал. Даже рантаймы все равно на всякий случай кидал в папку с dll - без толку
библиотеки (твои) и рантайм - точно 32 бита? (MT4 32-х битный)

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет!
Да, такие вопросы уже явно встречались. Поиском сам нашел много интересных тем (https://www.mql5.com/ru/forum/145702/page2 - наиболее интересная и подробная из них). Но я эту проблему упорно победить не могу.
Итак.
Что имеется: Metatrader 4 и Visual Studio 2005.
Что нужно: написать на С++ dll, функции которой потом импортировать и использовать в советнике.
В чем проблема: при подключении написанной dll советник выдает ошибку 126, что не может эту dll открыть. Следовательно все функции тоже не импортируются.
При чем на С++ я эту dll ради интереса пробовал подключать из тестового приложения - все ок. Решил проблему начать решать с самых низов. Создал с нуля шаблонный проект в VS2005 (Win32 Console Application библиотека DLL с параметрами по умолчанию)
Первым делом в настройках проекта для всех конфигураций поставил свойство Runtime Library в значение MT (чтобы в саму dll при компиляции засовывались все внешние зависимости - это первый совет, который всегда бывает при возникновении такой ошибки)
Depends Walker (второй по популярности совет при этой ошибке) никаких ошибок не выдает, показывает только зависимость от kernel32.dll (ядро Винды - есть на любом компе). Если не выставлять в предыдущем пункте MT, то появляется зависимость от рантайма 2005 студии - msvcr80.dll.
В код dll ВООБЩЕ ничего не добавлял. Оставил только то, что по шаблону студия сгенерила. И все равно при попытке импорта этой dll из советника выдается ошибка Cannot load 'Test.dll' [126] в закладке Эксперты терминала MT4. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.