This is a mirror of official site: http://jasper-net.blogspot.com/

Делаем библиотеку написанную на .Net понятной для Unmanaged кода

| Wednesday, February 1, 2012
Пол года проработав в компании, которая занимается программированием на 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: http://chart.googleapis.com/chart?chs=80x80&cht=qr&choe=UTF-8&chl=http://habrahabr.ru/blogs/net/137300/

Posted via email from Jasper-net

0 comments: