Ошибка "cannot load library (error 126)" при использовании библиотеки - страница 2

 
У меня аналогичная проблема при подключении библиотеки с зависимостями. Хотелось бы услышать мнение гуру MQL по этому поводу =)
 

Если проблема в зависимостях -- возможно ответ отсюда поможет зело:

http://stackoverflow.com/questions/14361992/dll-load-library-error-code-126

 
TheXpert:

Если проблема в зависимостях -- возможно ответ отсюда поможет зело:

http://stackoverflow.com/questions/14361992/dll-load-library-error-code-126

Спасибо, попробую

 

Проблема решена. Разобрался. Спасибо TheXpert за консультирование.

Во-первых, не все можно слинковать статически. Если используемый ресурс поставляется только с DLL (а не с *.lib-файлами) невозможно слинковать свою DLL-ку с используемыми ресурсами полностью статически. Что важно, при этом компилятор не ругается. То есть, при включении режима Runtime Library: Multi-threaded (/MT) компилятор загружает в итоговую DLL-ку только лишь по возможности и это совершенно не гарантирует, что в итоге мы получим независимую DLL.

Во-вторых, очень важно использовать грамотный инструментарий для отслеживания всех вызовов. Dependency Walker лажает, иногда сообщает о проблемах когда их нету или наоборот не замечает трудности когда они на самом деле имеют место. Идеальный вариант отладки: Process Monitor. Тулзовина позволяет просматривать абсолютно все действия того или инного процесса. Другими словами, мы видим все возможные обращения MT4 к тем или инным файлам, видим результаты этих запросов, видим пути по которым ищутся файлы. В результате оказалось, что отсутствовали абсолютно странные библиотеки о который умалчивал Dependency Walker.

 В-третьих, терминал ищет используемые советником DLL-ки в каталоге Terminal_folder\experts\libraries\, а вот если DLL-ка тянет за собой что-то другое, то эти либы должны находиться либо в системных каталогах (system/system32), либо же в одном каталоге вместе с бинарем MT4 (terminal.exe).

Причина обращения: