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

 

Можно использовать С++ враппер с помощью 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

Include managed C# DLL into unmanaged C++ DLL - all in one single file
Include managed C# DLL into unmanaged C++ DLL - all in one single file
  • stackoverflow.com
In comparison to the question above i need to combine DLLs so that final mixed DLL could export their functions to other unmanaged applications. For this i would like to compile them both as .netmodule and then combine them into one file with a linker so i have : 1) Libs - project with some library in C# - it does not have any dependencies...
 
Renat Fatkhullin:

Да, через некоторое время напишем новую статью про использование DLL. Там очень много интересного добавлено.

А пока можете примеры из обсуждаемой статьи использовать. Там ничего сложного нет.

Ну и .. Сколько ещё ждать? Год, два... или 10?

 Уже 3 года прошло. По статье, указанной в самом начале не возможно импортировать методы из dll. Где примеры?

 

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

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

 
new-rena:

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

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

.Cfdrewtzu
 
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# 

 

Спасибо за ответ!

У меня вопрос как раз по MT5 - там заявлена нативная поддержка .NET библиотек, но у меня не получается запустить библиотеку на .NET5, только на .NET4.

Причина обращения: