Обсуждение статьи "Как за 10 минут написать DLL библиотеку для MQL5 и обмениваться данными?" - страница 8

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
To Prival .
Если Вы сформулируете достаточно интересную задачу с применением МатКада (для начала не очень сложную), то уверен, что найдутся спецы, которые захотят присоединиться к решению данной задачи.
2010.05.06 02:28:14 Setka_Final_1 (EURUSD,M5) Ошибка создания SetVLine VLine_838524 4202 t1= 2010
Если объект не найден. Программа должна была его создать. Но объект есть if(…) почему же тогда выдается 4202.
Можете ли вы показать мне импорт структуры в библиотеку C++?
Мне нужно добавить этот код в MQL5DLLSample.cpp:
------------------------
struct MqlTick
{
INT64 Time;
double Bid;
double Ask;
double Last;
UINT64 Volume;
};
_DLLAPI MqlTick __stdcall MyTick(MqlTick &my)
{
my.Bid = 1;
return(my);
}
------------------------
Затем я добавляю этот код в MQL5DLL Test.mq5 (раздел импорта)
MqlTick MyTick(MqlTick &tick);
и вызываю его в OnTick()
MqlTick tick;
SymbolInfoTick("GBPUSD", tick);
MyTick(tick);
Print("Мой тик: ",tick.bid);
------------------------
Компиляция библиотеки c++ и советника проходит без ошибок.
После вызова функции MyTick(tick) в терминале получаю ошибку: MQL5DLL_Test (EURUSD,M1) Access violation write to 0x00000008
Здравствуйте и спасибо за эту полезную статью.
Я пытался создать небольшую dll для обмена данными между mql5 и mysql.
Я выполнил несколько шагов и столкнулся с некоторыми ошибками.
Длл написана на c++.
Первая была скомпилирована с помощью minGW.
Ex5 не смог открыть ее, потому что она не была 64-битной скомпилированной dll.
Поэтому я скомпилировал ее с помощью minGW 64 бит.
Моя первая dll (которая была очень простой) работает.
Она делает некоторые добавления и т.д..
Когда я пытаюсь использовать библиотеку mysql, я могу скомпилировать и собрать свою dll без каких-либо проблем.
Но когда я пытаюсь открыть ex5, вызывая ее, я получаю следующую ошибку:
Cannot open C:\user......\DLLNAME.dll (193)
У вас есть идеи, как это исправить?
Большое спасибо
Привет всем,
отличная статья!
Но я хотел спросить, может ли кто-нибудь помочь мне сделать то, что описано в этой статье, как бы задом наперед: получить данные (тики или бары) в программу C++ из metatrader?
День добрый! К слову о передачи строк в функции из DLL
Имею след. код:
#include <WinUser32.mqh>
#import "mt4excel.dll"
bool ExcelOpen();//Открывает Excel и создает чистую страницу
bool ExcelSetTextCell(int X,int Y,char Value[]);//Записать текст в ячейку
/*
others cut
*/
#import
void OnTick()
{
MqlRates rates [];
int copied=CopyRates("EURUSD",PERIOD_M1,0,1,rates);
ExcelSetTextCell(1,1,"Tool");
ExcelSetTextCell(2,1,"EURUSD");
ExcelSetValueCell(2,2,rates[0].close);
}
Как и говорилось, в Excel отображается только первая буква из передаваемых туда с помощью ExcelSetTextCell. После прочтения этой нитки, я понял в чем причина, но не совсем пойму как добиться того, что нужно. Дело в том, что DLL писал не я, это библиотека функций для работы с Excel через MT4. По понятым причинам MT5 кидает туда указатель на строку, где лежит лишь первый символ. Вопрос в том, как можно заставить MT5 передать туда то, что нужно, если у меня нет возможность править исходный код DLL? Ведь насколько я догоняю, нужно в самой DLL в коде каждой функции дописать нечтно вроде
_DLLAPI void __stdcall demo(char *stream, char *buf){ buf=stream;}
Буду признателен за коментарии разработчиков MT5
Спасибо!
ns_k, не забывайте, что строки в MQL5 - юникодные.
Возможны 2 решения.
1. Переделать (доделать) dll для приёма юникодных строк
2. Самому конвертировать строку в массив
ns_k, не забывайте, что строки в MQL5 - юникодные.
Возможны 2 решения.
1. Переделать (доделать) dll для приёма юникодных строк
2. Самому конвертировать строку в массив
Второе решение мне подходит. Скажите, я видимо тогда должен и объявление фукнции изменить? Т.е. вместо
bool ExcelSetTextCell(int X,int Y, string Value);//Записать текст в ячейку
я должен написать объявление где третим параметром будет массив? Если да, как это сделать не пойму. Спасибо!
updated: разобрался все же, чуть подумать надо было. Спасибо за помощь!!
Объявление функции DLL
Вызов функции DLLОбьявление функции DLL
Вызов функции DLL