Пол года проработав в компании, которая занимается программированием на MQL под Meta Trader столкнулся с таким заказом: клиенту нужно что бы программа была написана на C# или VB.Net.Задача была в том, что бы написать программу на C# и dll на том же языке, которая связывает приложение с торговым советником на MQL. С одной стороны мне это на руку, так как C# изучаю больше года, с другой — стало непонятно, а как же это делается и вообще возможно ли это? Ни для кого не секрет, что библиотека, написанная на C# не имеет в своем коде раздела для экспорта, и собственно передать название функции не является возможным. Пару часов поисков в интернете таки дали мне понять, что решение существует, и состоит оно в следующем: Нужно декомпилировать библиотеку при помощи ILDASM, получив при этом IL-код
Изменить код так, что бы функции стали экспортируемыми
Заново собрать при помощи ILASM
Про IL что-то там слышал, но в глаза ни разу не видал сие чудо. Что бы вам не пришлось искать литературу, которой по данному вопросу не так и много, опишу всё шаг за шагом. В результате у нас получится библиотека, которая отлично запускается из любой программы. Итак приступим:
Первым делом создадим обычную библиотеку, в которой будет 2 метода, где первый выводит на экран всем любимое «Hello, World!», второй возвращает сумму двух чисел.Названия функций желательно выбрать такими, которые потом будет легко найти.
Собственно вот как выглядит код нашей библиотеки:using System;
using System.Windows.Forms;namespace Test
{
public class Class1
{
public static void Message_Export(String message)
{
MessageBox.Show(message);
} public static Double Sum_Export(Double a, Double b)
{
return a + b;
}
}
}
Read more: Habrahabr.ru
QR:
Изменить код так, что бы функции стали экспортируемыми
Заново собрать при помощи ILASM
Про IL что-то там слышал, но в глаза ни разу не видал сие чудо. Что бы вам не пришлось искать литературу, которой по данному вопросу не так и много, опишу всё шаг за шагом. В результате у нас получится библиотека, которая отлично запускается из любой программы. Итак приступим:
Первым делом создадим обычную библиотеку, в которой будет 2 метода, где первый выводит на экран всем любимое «Hello, World!», второй возвращает сумму двух чисел.Названия функций желательно выбрать такими, которые потом будет легко найти.
Собственно вот как выглядит код нашей библиотеки:using System;
using System.Windows.Forms;namespace Test
{
public class Class1
{
public static void Message_Export(String message)
{
MessageBox.Show(message);
} public static Double Sum_Export(Double a, Double b)
{
return a + b;
}
}
}
Read more: Habrahabr.ru
QR:
0 comments:
Post a Comment