В принципе, статическая или динамическая линковка - для меня не принципиально. Накопировать библиотек не проблематично. Лишь бы работало.
Еще пробовал использовать другие библиотеки для доступа к базе (в частности, SQLAPI). Ситуация не изменилась. Как только начинаю использовать посторонний код - получаю ошибку.
Для начала, имхо, слинковать статически, чтобы на 100% избавиться от проблемы депенденсов. Dependency Walker может не на все ругаться.
Если не поможет, попробуйте подключить эту либу\дллку к своему внешнему проекту, проще будет отловить проблему.
Спасибо за быстрый ответ.
Слинковать статически, в смысле сделать Static Library? То есть, *.lib файл?
Слинковать статически, в смысле сделать Static Library? То есть, *.lib файл?
Сорри, неправильно выразился. Если есть возможность, все зависимости сделать либами а не дллками, да.
В принципе, явно я подключаю только lib-файлы:
Основную либу Postgres (libpq.lib) указал в зависимостях: Linker->Input->Additional Dependencies (указал в конце списка, после точки с запятой, просто название).
А вот какие либы оно использует из PostgreSQL\9.2\lib я даже не знаю (там есть и *.lib и *.dll). Я просто подключил каталог с либами Postgres в Linker->General->Additional Library Directories (указал полный путь).
Не, это не то.
126 может быть если при загрузке не получается найти длл, от которых зависит та дллка которую вы подгружаете.
Например если у вас динамическая линковка, может понадобиться рантаймовская дллка
Не, это не то.
126 может быть если при загрузке не получается найти длл, от которых зависит та дллка которую вы подгружаете.
А можно собрать библиотеку со статической линковкой, если я использую посторонние DLL? Хотя, я лично так и не понял какие именно либы (или DLL) используются. В cpp-файле, по факту, подключается только хедер.
Например если у вас динамическая линковка, может понадобиться рантаймовская дллка
Короче проверьте зависимости дллки, битность, нормальность def файла, если нет, то
Если не поможет, попробуйте подключить эту либу\дллку к своему внешнему проекту, проще будет отловить проблему.
Короче проверьте зависимости дллки, битность, нормальность def файла, если нет, то ....
А как можно проверить зависимости кроме как с помощью Dependency Walker?
Битность библиотек правильная, def файл перепроверял. Все ок вроде. Да и в случае если функция не связана с внешними либами, она успешно работает при подключении к МТ4. Я так понимаю, это может свидетельствовать о корректности def-файла.
Есть следующие вопросы, которые могли бы здорово прояснить ситуацию. Буду благодарен за помощь.
1. На сколько я понял, в настройках моего проекта указана статическая линковка (Runtime Library: Multi-threaded (/MT)). Однако, не понятно как определить используемые либы и можно ли с ними линковаться статически.
2. Как можно убедиться, что библиотека правильно слинкована статически? У нее пропадают зависимости если щупать ее Dependency Walker-ом?
3. Если говорить о динамической линковке, то используемые DLL моей DLL тоже стоит помещать в каталог Terminal_folder\experts\libraries\?
4. Зависимости смотреть только Dependency Walker-ом? Если он ругается на библиотеку, скачивать ее и класть в тот же каталог где и основная DLL-ка? Другие библиотеки не давать ему?
А я пока попробую экспериментировать с внешним проектом. Так действительно должно быть проще.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
День добрый сообществу.
Имеется проблема с разработкой DLL для подключения к МТ4. К сожалению, поиск решений в интернете и на этом форуме результатов не дал. Надеюсь на вашу помощь.
Суть задачи: Пишу DLL для коммуникации с базой данных PostgreSQL.
Проблема: При сборке библиотеки с подключенными либами Postgres-а, в МТ4 при использовании получаю ошибку: cannot load library 'Mt4PostgressBridge.dll' (error 126).
Исходники:
Mt4PostgressBridge.def
Mt4PostgressBridge.cpp
StdAfx.cpp
#pragma once
Конфигурация:
Собираю с помощью Visual C++ 2010, хостовая ОС Windows 7.
1. def-файл подключил в Linker->Input->Module Definition File (указал полный путь).
2. Хедеры Postgres подключил в C/C++->General->Additional Include Directories (указал полный путь).
3. Либы Postgres подключил в Linker->General->Additional Library Directories (указал полный путь).
4. Основную либу Postgres указал в зависимостях: Linker->Input->Additional Dependencies (указал в конце списка, после точки с запятой, просто название).
5. Изменил C/C++->Code Generation->Runtime Library на Multi-threaded (/MT).
Скрины конфигурации:
Советник:
Библиотеку копирую сюда: Terminal_folder\experts\libraries\
Также накопировал туда все Postgres-овские библиотеки (с каталога bin).
Еще прогонял библиотеку Dependency Walker-ом. Он ругнулся на 3 библиотеки, я их скачал и положил в тот же каталог (Terminal_folder\experts\libraries\). Не помогло.
Если в коде закомментировать строку использования подключенных либ Postrgres-а:
conn = PQconnectdb("user=test password=testpass dbname=testdb hostaddr=192.168.0.155 port=5432");
то библиотека подключается нормально и функция возвращает корректный int-овый ответ.
Если что, пробовал запускать МТ4 от обычного пользователя и от администратора (правый клик->Run as administrator)
Подскажите, пожалуйста, что делаю неправильно. Спасибо.