MQL4. Ошибка 126 при подключении внешней dll

 

Всем привет!

Да, такие вопросы  уже явно встречались. Поиском сам нашел много интересных тем (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. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.

UPD. Естественно в МТ4 стоит галка на разрешение импорта dll. Обычно такая проблема возникает при перетаскивании dll на другие компы, где нет, например, того же рантайма Visual Studio, а свойство проекта Runtime Library не установлено в значение MT. Но тут и свойство установил, и комп, на котором все это и прогается. 
Ошибка "cannot load library (error 126)" при использовании библиотеки - MQL4 форум
  • www.mql5.com
Ошибка "cannot load library (error 126)" при использовании библиотеки - MQL4 форум
 
gammaray:

Всем привет!

Да, такие вопросы  уже явно встречались. Поиском сам нашел много интересных тем (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. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.

UPD. Естественно в МТ4 стоит галка на разрешение импорта dll. Обычно такая проблема возникает при перетаскивании dll на другие компы, где нет, например, того же рантайма Visual Studio, а свойство проекта Runtime Library не установлено в значение MT. Но тут и свойство установил, и комп, на котором все это и прогается. 
gammaray:

Всем привет!

Да, такие вопросы  уже явно встречались. Поиском сам нашел много интересных тем (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. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.

UPD. Естественно в МТ4 стоит галка на разрешение импорта dll. Обычно такая проблема возникает при перетаскивании dll на другие компы, где нет, например, того же рантайма Visual Studio, а свойство проекта Runtime Library не установлено в значение MT. Но тут и свойство установил, и комп, на котором все это и прогается. 

У MQ есть шаблон проекта под длл, там фишка в том, что надо указать все видимые функции в файле .def. А такого анахронизма студии давно не делают.

Советую взять за основу этот древний пример, 2005 его переконвертит в свой формат

----------

ЗЫ: лучше 2015 

 

пользуюсь embarcadero никаких проблем с библиотеками нет, при переносе на другой комп также 

 чтобы сказать в чем ошибка прикрепите свой файл тест

такое может возникать например когда ВЫ неправильно указали типы переменных в вызове длл - я когда то долго искал причину этой ошибки.

 

да и кстати Вы куда эту бибилотеку кидаете в какую папку?  

 

Ошибка 126 появляется чаще всего тогда, когда подключаемая длл зависит от другой а другая отсутствует.

Надо dependency walker и посмотреть зависиомсти вашей длл. 90% что это crt либа от студии

 
Alexey Volchanskiy:

У MQ есть шаблон проекта под длл, там фишка в том, что надо указать все видимые функции в файле .def. А такого анахронизма студии давно не делают.

Советую взять за основу этот древний пример, 2005 его переконвертит в свой формат

----------

ЗЫ: лучше 2015 

А не подскажите название этого шаблона? Что-то не могу найти в папки MT его... Может и не там ищу)
 
Комбинатор:

Ошибка 126 появляется чаще всего тогда, когда подключаемая длл зависит от другой а другая отсутствует.

Надо dependency walker и посмотреть зависиомсти вашей длл. 90% что это crt либа от студии

Это уже делал
 
Vladislav Andruschenko:

пользуюсь embarcadero никаких проблем с библиотеками нет, при переносе на другой комп также 

 чтобы сказать в чем ошибка прикрепите свой файл тест

такое может возникать например когда ВЫ неправильно указали типы переменных в вызове длл - я когда то долго искал причину этой ошибки.

 

да и кстати Вы куда эту бибилотеку кидаете в какую папку?  

В папку Libraries каталога MT. Какой именно тест Вас интересует (сама dll, тест на с++ или тест советника)?
 
gammaray:

Всем привет!

Да, такие вопросы  уже явно встречались. Поиском сам нашел много интересных тем (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. Библиотека вообще пустая. Никаких зависимостей нет. Ничего в ней нет. А ошибка есть... Помогите, кто чем может, пожалуйста...) А то уже третий день голову ломаю с этой байдой. И на таком примитиве вся работа застопорилась.

UPD. Естественно в МТ4 стоит галка на разрешение импорта dll. Обычно такая проблема возникает при перетаскивании dll на другие компы, где нет, например, того же рантайма Visual Studio, а свойство проекта Runtime Library не установлено в значение MT. Но тут и свойство установил, и комп, на котором все это и прогается. 

ненашлись библиотеки CRT (оригиналы лежат в каталоге студии по пути VC/redist/x86 и x64 соотв.). Достаточно скопировать требуемые в один каталог с вашей DLL. Иначе даже на машине разработчика они могут неподхватиться

Можно похорошему их ставить клиентам через официальную и бесплатную установку с сайта Microsoft, но так почему-то невсегда работает :-)

 
Maxim Kuznetsov:

ненашлись библиотеки CRT (оригиналы лежат в каталоге студии по пути VC/redist/x86 и x64 соотв.). Достаточно скопировать требуемые в один каталог с вашей DLL. Иначе даже на машине разработчика они могут неподхватиться

Можно похорошему их ставить клиентам через официальную и бесплатную установку с сайта Microsoft, но так почему-то невсегда работает :-)

Про эти библиотеки я писал (установил свойство проекта Runtime Library в значение MT - они уже "вшиться" таким образом должны в выходную dll). Dependency Walker зависимость после утановки этого свойства от рантаймов показывать перестал. Даже рантаймы все равно на всякий случай кидал в папку с dll - без толку
 
gammaray:
Про эти библиотеки я писал (установил свойство проекта Runtime Library в значение MT - они уже "вшиться" таким образом должны в выходную dll). Dependency Walker зависимость после утановки этого свойства от рантаймов показывать перестал. Даже рантаймы все равно на всякий случай кидал в папку с dll - без толку
библиотеки (твои) и рантайм - точно 32 бита? (MT4 32-х битный)
 
Maxim Kuznetsov:
библиотеки (твои) и рантайм - точно 32 бита? (MT4 32-х битный)
Естественно)