Обсуждение статьи "Как открыть мир C# из MQL5 путем экспорта неуправляемого кода" - страница 6

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо, полезная статья!!! Респект!
Как передать в С# из МТ строку, в статье такого я не нашел. Поясните пожалуйста.
Спасибо, полезная статья!!! Респект!
Как передать в С# из МТ строку, в статье такого я не нашел. Поясните пожалуйста.
Опубликована новая статья Exposing C# code to MQL5 using unmanaged exports:
Автор: investeo
Здравствуйте, investeo, отличная статья!
Я нашел эту статью в поисках того, как подключить C# DLL к коду mql5... и это мне очень помогло! Спасибо.
Теперь мне нужно получать данные из DLL, которая работает по WebSocket соединению со сторонним сервером, и отправлять живые данные, которые приходят с сервера на MQL5, но я не нашел ни одного примера реализации реального времени и двухсторонней связи между MQL5 и DLL или API.
Можете ли вы мне помочь?
Ошибка 2 C:\Users\Administrator\AppData\Local\Temp\tmp8B24\dllTest.il(58) : error: syntax error at token '{ ' в: { dllTest
Эта ошибка возникает на китайских системах, потому что UnmanageExports не работает должным образом, поскольку некоторые комментарии генерируются на китайском языке, когда UnmanageExports генерирует IL-файл. Эта проблема не возникает на японских и английских операционных системах, и решение есть - вы можете сменить свою операционную систему на английскую.
Но это было бы слишком сложно, так что вам нужно вытащить маленькую лисичку, чтобы исправить это!
Загрузите исправление Unmanaged Exports, предоставленное Little Fox, по следующему адресу
https://www.noisyfox.cn/397.html
http://www.magecorn.com/p/280.shtml .
Для получения более подробной информации, пожалуйста, прочитайте две вышеупомянутые статьи
Владелец приведенного выше кода как не смог его запустить?
2017.04.28 23:48:08.774 Cannot find 'Add' in 'Testme.dll'
Включите в навигаторе редактора "Показ всех типов файлов", схватите свою DLL мышкой и бросьте в окно MQL5 программы.
Скорее всего удивитесь результату.
День добрый. На дворе 2018 год....
Подскажите где можно посмотреть примеры вызова экспортируемых функций, написанных на Net?
Можно использовать С++ враппер с помощью IJW, а потом мержить все в одну единственную DLL чисто средствами компилятора - линкера, извращения с шаблоном, описанные в статье не нужны, описал вкратце здесь - http://stackoverflow.com/questions/26226958/include-managed-c-sharp-dll-into-unmanaged-c-dll-all-in-one-single-file
Ну, а описанный метод с шаблоном RGiesecke - это хак и такое рано или поздно перестает работать, у меня, кстати, тоже не заработал ...Но, если кому все же хочется поиграться с IL методом описанным в статье, то есть еще один велосипед, правда, также нерабочий - https://github.com/winch/winch.pinkbile.com-c-sharp/tree/master/dll_tool/dll_tool
День добрый. Вы бы могли написать пошаговый тестовый пример сборки c++/c++CLI/c# в одном файле? Те же самые простые примеры, что и у автора статьи.
Большая просьба привести простейший пример функции написанной на С# для обращения к ней с мт4(или мт5) ........... Передать значения а и б в функцию с шарп и вернуть результат в мт4(мт5)
в статье https://www.mql5.com/ru/articles/249 компилированная dll автора работает и в мт4 и в мт5 исправно!
но когда я пытаюсь создать свою компилированную DLL с исходников автора (в VisualStudio 2010) то у меня эта dll не работает(пишет ошибка 127)
все версии .NET установлены
// код C#
using System;
using System.Text;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;
namespace TEST
{
class TEST
{
[DllExport("Add", CallingConvention = CallingConvention.StdCall)]
public static int Add(int left, int right)
{
return left + right;
}
}
}
namespace RGiesecke.DllExport
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
partial class DllExportAttribute : Attribute
{
public DllExportAttribute()
{
}
public DllExportAttribute(string exportName)
: this(exportName, CallingConvention.StdCall)
{
}
public DllExportAttribute(string exportName, CallingConvention callingConvention)
{
ExportName = exportName;
CallingConvention = callingConvention;
}
public CallingConvention CallingConvention { get; set; }
public string ExportName { get; set; }
}
}
// код МТ4
//+------------------------------------------------------------------+
#import "TEST.dll"
int Add(int a,int b);
#import
void start()
{
Comment(Add(3,2));
}
//+------------------------------------------------------------------+
три дня и три ночи гуглил и ставил эксперименты, в общем пример работает в VS2017, получилось у меня скомпилировать и запустить .dll под МТ4, но .... под Win10 на русском языке не сумел запустить.
Сделал так: установил виртуальную машину с Win7 - 64, но на англ. языке, установил англ. версию VS2017, установил только пакет для C#, скопировал шаблон от RGiesecke в папку с шаблонами VS2017. При компиляции проекта, не забываем проверить платформу - обязательно x86 (для МТ4) . Во время первой компиляции получил ошибку нет пространства имен RGiesecke, установил из проекта пакет UnmanagedExports. Все скомпилировалось с 1 ошибкой - не найден ildasm.exe , но .dll работает под MT4 без проблем.
Проблема видимо в шаблоне от RGiesecke, он работает корректно в англ. версии Win, в англ. версии VS2017 и все пути в VS2017 должны быть установлены по умолчанию
воткактотак ;)
Работает ли такой подход для .NET 5 версии?
не проверял, но сомневаюсь, что будет работать
МТ4 очень сложно взаимодействует с C# - постоянно какие подводные камни
проще на МТ5 перейти
но если принципиально МТ4 использовать, то как вариант - запустите по методике из статьи .dll на C# , а в ней в отдельном потоке запустите любой код C# и организуйте обмен , я так запускал 64-разрядные библиотеки C#