#gui #компоновщик #d
В процессе ознакомления с D, появилось желание написать что-нибудь простенькое с
GUI. В качестве GUI-библиотеки выбрал DWT, т.к. кроссплатформенно и является биндингом
с SWT (много обучающего материала по последнему).
Проект был скачан с ГитХаба, собран и перенесен в папку C:\D\. Методом проб и ошибок
была получена работающая команда для сборки демонстрационного окошка с надписью "Hello,
DWT!" посередине:
dmd.exe "..\src\%1" -IC:\\D\\dwt\\imp ^
-JC:\\D\\dwt\\org.eclipse.swt.win32.win32.x86\\res ^
-L+C:\\D\\dwt\\lib\\ -L+org.eclipse.swt.win32.win32.x86.lib ^
-L+dwt-base.lib -L/SUBSYSTEM:windows:4 ^
-L/rc:..\res\resource.res
, что соответствует следующим параметрам в dub.json:
"importPaths": ["C:\\D\\dwt\\imp"],
"stringImportPaths": ["C:\\D\\dwt\\org.eclipse.swt.win32.win32.x86\\res"],
"lflags": ["+C:\\D\\dwt\\lib\\"
, "+org.eclipse.swt.win32.win32.x86.lib"
, "+dwt-base.lib", "/SUBSYSTEM:windows:4"
, "/rc:res\\resource.res"]
Код самой программы:
import org.eclipse.swt.all;
void main()
{
auto display = new Display;
auto shell = new Shell(display);
shell.setLayout(new GridLayout(4, false));
auto label = new Label(shell, 0);
label.setText("Hello, DWT!");
shell.pack();
shell.open();
while (!shell.isDisposed)
if (!display.readAndDispatch())
display.sleep();
display.dispose();
}
И программа собирается в один в один единственный exe без зависимостей и на ура запускается
на ОС от WinXP до Windows8. Но меня терзают серьезные сомнения, что я тут наворотил
лишнего, и можно было бы как-то по-проще.
Если кто-то разумеет в dmd или dub и в тонкостях их отношений с линковщиком, подскажите,
как в описанной ситуации поступил бы белый человек.
Ответы
Ответ 1
Проще будет, если библиотеку добавят в dub-репозиторий. Пока этого не случится, нужно прописывать пути самостоятельно. Шаги, которые нужно сделать. Выбираете место для библиотеки (на вашем примере, это может быть C:\D) Открываете консоль, заходите в выбранную директорию. Следуете инструкции с github: Клонируете репозиторий git clone --recursive git://github.com/d-widget-toolkit/dwt.git Появится папка C:\D\dwt с проектом и зависимостями. Заходите в эту папку cd dwt Выполняете сборку проекта rdmd build base swt. Собственно, теперь можно подключать библиотеку в свой проект. Для компиляции из командной строки нужно будет выполнить dmd main.d -IC:\D\dwt\imp -JC:\D\dwt\res -L+C:\D\dwt\lib\ "-L+org.eclipse.swt.win32.win32.x86.lib" "-L+dwt-base.lib" -L/SUBSYSTEM:WINDOWS:4.0` Именно это и написано в инструкции на гитхабе: dmd main.d -I\imp -J \res -L+ \lib\ ^ "-L+org.eclipse.swt.win32.win32.x86.lib" "-L+dwt-base.lib" ^ -L/SUBSYSTEM:WINDOWS:4.0 - это путь к директории самого dwt, лезть к res в org.eclipse.swt.win32.win32.x86 не требуется, так как нужный res лежит в самой dwt. Итог у вас почти правильный. Если внимательно следовать инструкции к библиотеке, то ошибок никаких нет. Для того, чтобы в будущем не прописывать все пути/зависимости в проекте, можно сделать "пустой" проект и впоследствии просто копировать его в качестве нового. P.S. Лично я использую библиотеку DlangUI. Кроссплатформенная, с широкими возможностями, интерфейсы можно удобно собирать, используя разметку DML (похожую на QML) и др. Есть статья от автора. P.P.S. Обязательно используйте фигурные скобки во while while (!shell.isDisposed) { if (!display.readAndDispatch()) display.sleep(); } Иначе, добавив ещё какую-нибудь строку кода, можно получить некорректную логику программы.
Комментариев нет:
Отправить комментарий