Прошу помочь. Простейший советник (должен складывать два числа) закрывается сразу же при запуске. Решил скомпилировать DLL в C# при помощи UnmanagedExports 1.2.7, и вроде всё шло гладко, но в результате при вызове функции из DLL советник сразу же закрывается.
Вот коды программ:
C#:
MQL4:
this
:-)
в 4-ке так не работает...так только в 5-й
this
:-)
в 4-ке так не работает...так только в 5-й
работает
в 5-ке как раз этот пример и не будет работать, там сейчас вообще не нужно ничего экспортировать - все публичные статик методы автоматом видны в MQL5
Прошу помочь. Простейший советник (должен складывать два числа) закрывается сразу же при запуске. Решил скомпилировать DLL в C# при помощи UnmanagedExports 1.2.7, и вроде всё шло гладко, но в результате при вызове функции из DLL советник сразу же закрывается.
Вот коды программ:
C#:
MQL4:
используйте статью https://www.mql5.com/ru/articles/249
все примеры с использованием шаблона Robert Giesecke Unmanaged exports работают в MQL4 на 100% - я проверял
единственное - у меня не работал экспорт с помощью шаблона Robert Giesecke в русскоязычных Windows , я установил на виртуалку англ. Win7 - и все работает без проблем, т.е. проект писал и компилировал на виртуалке, а готовую .dll копировал и использовал в обычных терминалах MT4
Кстати, а что именно надо выбирать для проекта в Visual Studio под шаблон Robert Giesecke?
Там просто есть слишком много вариантов:
"Классическое приложение Windows --> Библиотека классов (.NET Framework)"
"Классическое приложение Windows --> Библиотека элементов управления Windows Forms (.NET Framework)"
".NET Core --> Библиотека классов (.NET Core)"
".NET Standart --> Библиотека классов (.NET Standart)"
- www.mql5.com
В общем потратил кучу времени, установил виртуальную машину, на неё - винду семёрку англоязычную, дальше - новый Визуал 2019 накатил, скомпилировал DLL вот с такими результатами, как на прикреплённом скриншоте, а общий итог... ничего не сдвинулось с места(( советник просто вылетает на вызове функции.. я почти в отчаянии
ещё раз по буквам - Т О Л Ь К О Д Л Я M T 5
---
из 32-х битного приложения, которым является 4-ка, виртуальная машина CLR иначе чем дикие грабли не вызывается
грабли...вилы... колхоз...
пишу ж - есть статья, проверял в прошлом году, все работает, времени убил прилично - пока не нагуглил, что на русскоязычной Вин не взлетел шаблон, потом времени убил прилично, чтоб свою Вин сделать на англицкйи манер - даже получилось, все начало работать, потом перешел на Вин10 - и понял, что быстрее установить на виртуалку вин и не париться с поиском, что не работает опять
вот запустил на виртуалке, создал новый проект по шаблону Robert Giesecke, все работает
код C#:
using System; using System.Data; using System.Text; using System.Runtime.InteropServices; using RGiesecke.DllExport; namespace tst { public static class testclass { [DllExport("add", CallingConvention = CallingConvention.StdCall)] public static int add(int a, int b) { return a + b; } [DllExport("mul", CallingConvention = CallingConvention.StdCall)] public static int mul(int a, int b) { return a * b; } } }
код скрипта MQL4:
#property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #import "tst.dll" int add(int, int); int mul(int, int); #import //+------------------------------------------------------------------+ void OnStart() { Print("add = ", add(2, 3)); Print("mul = ", mul(2, 3)); } //+------------------------------------------------------------------+
результат (лог):
2021.03.05 21:10:13.297 Script tst EURUSD,H1: removed
2021.03.05 21:10:13.295 tst EURUSD,H1: uninit reason 0
2021.03.05 21:10:13.295 tst EURUSD,H1: mul = 6
2021.03.05 21:10:13.295 tst EURUSD,H1: add = 5
2021.03.05 21:10:13.295 tst EURUSD,H1: initialized
2021.03.05 21:10:13.287 Script tst EURUSD,H1: loaded successfully
проект под VS приатачил, в нем в папке Debug лежит tst.dll чтобы проверить скрипт, дальше модифицируйте проект VS и компилируйте, если "не взлетел" на МТ4, однозначно проблема на Вашей стороне
удачи!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу помочь. Простейший советник (должен складывать два числа) закрывается сразу же при запуске. Решил скомпилировать DLL в C# при помощи UnmanagedExports 1.2.7, и вроде всё шло гладко, но в результате при вызове функции из DLL советник сразу же закрывается.
Вот коды программ:
C#:
MQL4: