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

 

Спасибо, полезная статья!!! Респект!

Как передать в С# из МТ строку, в статье такого я не нашел. Поясните пожалуйста.

 
new-rena:

Спасибо, полезная статья!!! Респект!

Как передать в С# из МТ строку, в статье такого я не нашел. Поясните пожалуйста.

.Cfdrewtzu
 
MetaQuotes Software Corp.:

Опубликована новая статья 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&nbsp.

Для получения более подробной информации, пожалуйста, прочитайте две вышеупомянутые статьи

 

Владелец приведенного выше кода как не смог его запустить?

2017.04.28 23:48:08.774 Cannot find 'Add' in 'Testme.dll'

Неважно, как написать C# DLL в соответствии с вашим методом, это бесполезно, я использовал другое программное обеспечение для тестирования этого метода также нет проблем, просто MT4 здесь не может, можете ли вы отправить новую небольшую версию?
 
Renat Fatkhullin:

Включите в навигаторе редактора "Показ всех типов файлов", схватите свою DLL мышкой и бросьте в окно MQL5 программы.

Скорее всего удивитесь результату.

День добрый. На дворе 2018 год....

Подскажите где можно посмотреть примеры вызова экспортируемых функций, написанных на Net?

 
Andy:

Можно использовать С++ враппер с помощью 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# в одном файле? Те же самые простые примеры, что и у автора статьи.

 
Konstantin Staryhin:
Большая просьба привести простейший пример функции написанной на С# для обращения к ней с мт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 версии?
 
Trader Fortis:
Работает ли такой подход для .NET 5 версии?

не проверял, но сомневаюсь, что будет работать

МТ4 очень сложно взаимодействует с C# - постоянно какие подводные камни

проще на МТ5 перейти

но если принципиально МТ4 использовать, то как вариант - запустите по методике из статьи .dll на C# , а в ней в отдельном потоке запустите любой код C# и организуйте обмен , я так запускал 64-разрядные библиотеки C#