Осваиваем Monodevelop. Часть II: делаем первый проект на базе DFL2

Долгожданное продолжение первой части.

… А теперь можно попробовать подружить D Form Library 2 (DFL2) с Monodevelop/MonoD, для чего создадим простой пример и откомпилируем его с помощью Monodevelop.

Для того, чтобы начать, потребуется создать проект (одна из минимальных единиц сборки в Xamarin Studio), для чего в меню File выбираем пункт Solution… и в результате видим такой мастер:


В котором выбираем пункт Empty D Project и жмем кнопку Next, переходя на следующий этап работы мастера создания решения:


В текстовом поле Project Name вводим имя проекта, в текстовое поле Solution Name – имя решения (эти два пункта в данном случае совпадают, а могут и не совпадать), а в Location указывается, где будет расположен проект.

Галочка под Location обозначает создание внутренней папки с именем решения, куда будут помещены все исходники – рекомендуется оставить эту пометку как есть, но если хочется иного варианта, то можете смело действовать. Остальные пункты предназначены для управления контролем версий (обычно, у меня на компьютере уже стоит Git, а потому эти пункты я не трогаю) и их можете расставить по своему вкусу.

Нажимаем кнопку Create, после чего получаем примерно вот такую жизнерадостную картинку:


Как видите – ни одного файла, только голая папка проекта и все.

Для исправления ситуации в панели Solution (это та, которая слева на скриншоте и которая открывается по щелчку левой клавиши мыши на слове Solution) находим синий значок с подписью, совпадающей с именем проекта, и нажимаем на него правой клавишей мыши и выбираем пункт меню Add и его подпункт New File…:


Далее выбираем Empty File, вводим имя файла и нажимаем кнопку New:


В итоге, получаем свежесозданный новый файл, который является частью проекта и который уже открыт на редактирование.

Для эксперимента, нарисуем в Entice Designer простенькую форму, скопируем весь код в наш файл (в данном случае, он зовется main.d), поправим процедуру main, как было описано в одной из статей про DFL и сохраним:


А вот теперь начинается самое интересное…

Чтобы подружить D Form Library с Monodevelop потребуется явно указать в свойствах решения, какие библиотеки будут линковаться и откуда надо брать определения для секций импорта.

Осуществить это можно следующим образом: нажимаем правой клавишей на имени проекта в панели Solution и в уже знакомом меню выбираем пункт Options, который выглядит примерно так:


Первый пункт, который нас интересует это раздел Build пункт Compiling.

Именно в этом пункте можно настроить линкуемые библиотеки и некоторые опции компилятора по отношению к проекту и именно в этом пункте есть такое понятие как конфигурация сборки (обратите внимание на выпадающий список перед которым написано Configuration), т.е. набор некоторых параметров компиляции, линковки и т.д, имеющих некоторое осмысленное название и содержащих некоторую логическую цепочку действий по сборке программы.

Конфигураций сборки, по традиции, две: Debug – отладочная сборка и Release – конечная, итоговая сборка, и нас интересуют обе, поскольку они слегка отличаются в плане настройки.

В пункте Compiling выбираем из списка Configuration конфигурацию Debug, далее в текстовое поле Libraries вставляем следующее:

dfl_debug.lib
ole32.lib
oleAut32.lib
gdi32.lib
Comctl32.lib
Comdlg32.lib
advapi32.lib
uuid.lib
ws2_32.lib

И ниже под этим текстовым поле ставим флажок Link in static/shared libraries from nested dependencies (Статическая линковка для библиотек из вложенных зависимостей), тем самым показывая компилятору с какими библиотеками пойдет связывание исполняемого файла и каким образом оно произойдет:


На этом настройка отладочной конфигурации завершена и аналогичным образом мы настраиваем конечную, релизную конфигурацию, но для того, чтобы отладочная консоль не появлялась во время запуска итоговой сборки, добавляем в Release в текстовое поле Extra Linker Options следующее:

L/SUBSYSTEM:WINDOWS:4.0

Библиотеки спешно указаны и осталось дело за малым, осталось указать откуда берутся импорты, для чего нам потребуется пункт Includes. Действия предельно просты: выбираем Includes и дальше жмем на кнопку Browse & Add и в открывшемся диалоге выбираем папку, куда копировали исходники DFL2:


Вот собственно и все, теперь можно компилировать и запускать: выбираем в верхней панели среды конфигурацию и либо нажимаем кнопку с треугольником, либо нажимаем Ctrl + F5 (что соответствует запуску без отладчика):


Как видно приложение запущено в режиме отладки, а черное окно которое видно за приложением есть нечто иное как внешняя консоль IDE, на которую может выводиться какая-нибудь информация (консоль стартует почти всегда и отключить ее появление можно в настройках, вот только где оно находиться, я не помню) и кроме того, консоль дает вам уникальную возможность – если приложение зависло во время старта, то отключить его вы можете просто закрыв окно консоли.

Ну и напоследок, код примера:

module main;

/*
 Generated by Entice Designer
 Entice Designer written by Christopher E. Miller
 www.dprogramming.com/entice.php
 */

import dfl.all;


class MyForm: dfl.form.Form
{
    // Do not modify or move this block of variables.
    //~Entice Designer variables begin here.
    dfl.textbox.TextBox textBox1;
    dfl.button.Button button1;
    //~Entice Designer variables end here.
    
    
    this()
    {
        initializeMyForm();
        
        //@  Other MyForm initialization code here.
        
    }
    
    
    private void initializeMyForm()
    {
        // Do not manually modify this function.
        //~Entice Designer 0.8.5.02 code begins here.
        //~DFL Form
        text = "My Form";
        clientSize = dfl.all.Size(352, 138);
        //~DFL dfl.textbox.TextBox=textBox1
        textBox1 = new dfl.textbox.TextBox();
        textBox1.name = "textBox1";
        textBox1.bounds = dfl.all.Rect(16, 32, 312, 24);
        textBox1.parent = this;
        //~DFL dfl.button.Button=button1
        button1 = new dfl.button.Button();
        button1.name = "button1";
        button1.text = "тест!";
        button1.bounds = dfl.all.Rect(216, 72, 112, 24);
        button1.parent = this;
        //~Entice Designer 0.8.5.02 code ends here.
    }
}


int main()
{
    int result = 0;
    
    try
    {
        Application.enableVisualStyles();
        Application.run(new MyForm);
    }
    catch(DflThrowable o)
    {
        msgBox(o.toString(), "Fatal Error", MsgBoxButtons.OK, MsgBoxIcon.ERROR);
        
        result = 1;
    }
    
    return result;
}

И ради интереса, скриншот одного реального проекта:

Добавить комментарий