#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(); } Иначе, добавив ещё какую-нибудь строку кода, можно получить некорректную логику программы.
Комментариев нет:
Отправить комментарий