Доброго времени суток!
Решил для себя написать dll, чтобы нормально связываться со своей основной программой на Qt.
Написал библиотеку,проверил её под Win и Linux - всё работает.
Прочитал статью https://www.mql5.com/ru/articles/18
Единственное, что отличается - библиотека собрана с использованием Qt, а не VS.
.....
Что я делаю не так?
путаешь библиотеку и компилятор, не думаешь о линкере и дин.загрузчике :-)
--kill-at спасёт отца русской демократии
Русский язык не мой родной. Имел в виду, что в статье описывается создание DLL в VS, а я её сделал в креаторе с использованием Qt. Как и делал уже 100500 раз. :)
Непонятно, что именно не нравится терминалу...
x64
Может для Qt, нужно ещё точку входа прописывать?
Может для Qt, нужно ещё точку входа прописывать?
Если только терминал её как-то по-особому загружает. Я выше написал, что после создания библиотек (в винде и linux) проверил их. Ладно, если бы это была моя первая библиотека - их уже очень много под разные железки. А вот с MT5 встречаюсь впервые.
Если только терминал её как-то по-особому загружает. Я выше написал, что после создания библиотек (в винде и linux) проверил их. Ладно, если бы это была моя первая библиотека - их уже очень много под разные железки. А вот с MT5 встречаюсь впервые.
убери в символах _
underscore мешает
навскидку не помню опцию gnu ld , посмотри в гугле про --kill-at
и надеюсь вы не C++ собирали, или добавляли __stdcall и extern "C" чтобы не использовать плюсовый манглингЕсли только терминал её как-то по-особому загружает. Я выше написал, что после создания библиотек (в винде и linux) проверил их. Ладно, если бы это была моя первая библиотека - их уже очень много под разные железки. А вот с MT5 встречаюсь впервые.
Для С++ попробуй так
Заголовочный файл библиотеки: #ifdef Q_OS_WIN #define MY_EXPORT extern "C" __declspec(dllexport) #else #define MY_EXPORT #endif MY_EXPORT int __stdcall add_value(int value); Тело библиотеки: MY_EXPORT int __stdcall add_value(int value) { return value + 5; }
убери в символах _
underscore мешает
навскидку не помню опцию gnu ld , посмотри в гугле про --kill-at
и надеюсь вы не C++ собирали, или добавляли __stdcall и extern "C" чтобы не использовать плюсовый манглингДобавлял, конечно. Я уже говорю - это не первая моя библиотека. И, да, библиотека собирается с C++.
Но, QLibrary её прекрасно загружает. Как и остальные библиотеки. А вот MT5 не хочет. Да и логи какие-то куцые. Может где есть подробнее?
Кстати, символ "_" я тоже проверил - не в нём дело.
Добавлял, конечно. Я уже говорю - это не первая моя библиотека. И, да, библиотека собирается с C++.
Но, QLibrary её прекрасно загружает. Как и остальные библиотеки. А вот MT5 не хочет. Да и логи какие-то куцые. Может где есть подробнее?
Кстати, символ "_" я тоже проверил - не в нём дело.
посмотри зависимости своей библиотеки
ldd прекрасно всё показывает
возможно какие-то Qt-шные зависимости не разрешаются, их надо перекладывать в правильные места
посмотри зависимости своей библиотеки
ldd прекрасно всё показывает
возможно какие-то Qt-шные зависимости не разрешаются, их надо перекладывать в правильные места
Там "библиотека" из одной функции. :) Хотя, посмотрю, мало ли
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Решил для себя написать dll, чтобы нормально связываться со своей основной программой на Qt.
Написал библиотеку,проверил её под Win и Linux - всё работает.
Прочитал статью https://www.mql5.com/ru/articles/18
Единственное, что отличается - библиотека собрана с использованием Qt, а не VS.
Положил библиотеку в Libraries
Сделал простой скрипт запуска
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#import "Libraries\\MQL5_dll.dll"
//#import "..\\Libraries\\MQL5_dll.dll" //TODO так тоже пробовал, ошибки те же
int add_value(int value);
#import
void OnStart()
{
add_value(5);
}
После запуска в лог падает:
2021.08.05 19:53:17.728 test_dll (EURUSD,H1) Cannot load 'Libraries\MQL5_dll.dll' [126]
2021.08.05 19:53:17.734 test_dll (EURUSD,H1) Cannot call 'add_value', 'Libraries\MQL5_dll.dll' is not loaded
2021.08.05 19:53:17.734 test_dll (EURUSD,H1) unresolved import function call
Заголовочный файл библиотеки:
#ifdef Q_OS_WIN
# define MY_EXPORT __declspec(dllexport)
#else
# define MY_EXPORT
#endif
extern "C" MY_EXPORT int add_value(int value);
Тело библиотеки:
int add_value(int value)
{
return value + 5;
}
Что я делаю не так?