Comments 49
Возьмите Qt. Там из коробки есть плагины, причем кросс-платформенные.
А что значит большой? Какими критериями вы оперируете?
Далее, в Qt существует самый лучший, в опенсорсе, табличный компонент для работы с данными, другими словами грид, или, как говорят в 1С, форма списка. Но, опять же, мне нужен просто другой табличный редактор, более простой, заточенный исключительно под мои цели. И реализовать это проще в WinAPI, а не в Qt. Просто Qt это промышленное производство, а мне нужна частная мастерская. Только и всего!
Зачем и для чего?
Это из разряда мифотворчества. Проще писать отдельно для Линукса и отдельно для Виндоуз. Большинство так и делают. А если вы пытаетесь одновременно сидеть на двух стульев, то, как минимум, кое в чем себя ограничиваете.
Тем более, это всего лишь проверка идеи компонентного проектирования кода. Сама ее реализация может быть применена где угодно.
Не вижу проблем! Если вы такой крутой программист, что ваша программа пойдет на ура на всех платформах, то можно написать не только три, а и тридцать три «отдельных кодовых баз». А расходы окупятся. Все равно ведь код надо тестировать в каждой платформе отдельно.
Возьмите фирму «1С», поднялась на Виндоуз платформе, теперь пишет отдельные свои продукты под Линукс и мобильные платформы. Насчет Мака не знаю. Но не думаю, что там будет тот же самый «кроссплатформенный» проект, что и под Линукс.
Поэтому не распространяете свои заблуждения среди неокрепших умов. По крайней мере, по методу: «Хайли лайкли». Если есть возражения по существу, приводите аргументированные примеры. И не учите других «правильно» программировать. Сами вы много публикаций написали, да еще кросплатформенных?
IS_DLL должен быть параметром, настраиваемым для конкретной конфигурации, а не частью файла stdafx.h
О, статья из нулевых.
Я подумал про примеры модулей С++ из последней версии стандарта ;-(
Так я как раз и надеялся, что статья покажет "новую" модульность С++ на реальных примерах.
Только там понимают под модулями не совсем то, что нужно, например, лично мне.
Это я читал, но до конца не въехал. Поэтому и понадеялся на более подробные примеры их использования, но статья оказалось про обычные DLL
Это я читал, но до конца не въехал.
Там уже шесть статей на эту тему. Вы их все читали? А на ваши вопросы разве не отвечали?
статья оказалось про обычные DLL
У меня суть не в dll. Главное, это способность выделить часть кода проекта в независимый бинарный модуль. Это нужно для борьбы со сложностью проектирования, удобством отладки, замены модулей без их перекомпиляции, для удобства командной работы, наконец, где каждый отвечает за свой собственный независимый блок кода. При этом конечный проект может не содержать dll вообще, а быть одним только ехе-шником, не считая внешних данных.
Читал все, но примеров по модулям С++ из нового стандарта недостаточно.
Вашу статью оценить не могу, т.к. примеры для сферического коня в вакууме с привязкой к одной конкретной платформе. Как уже сказали в комментариях выше, проще взять QT.
А для удобства командной работы вообще лучше использовать менее радикальные методы деления зон ответственности команды, чем перекраивать архитектуру приложения в угоду "удобства разработки", которое в будущем потянет за собой муки нелегкого сопровождения.
Читал все, но примеров по модулям С++ из нового стандарта недостаточно.
Я кажется понял, почему у вас возникли проблемы с модулями из стандарта С++ 20. Просто это еще сырая технология, до конца нигде не реализованная. Только местами, в отдельных компиляторах. Автор статьи об этом пишет прямо. Соответственно, нормальных и, главное, полезных примеров, вы пока нигде не найдете.
Но, с другой стороны, если вам нужна полноценная модульность, используйте Python, там она, по словам автора, на идеальном уровне. Хотя меня, лично, это не особо впечатляет. Ведь, что такое модульность в Питоне? По сути, удобная и эффективная работа с внешними пакетами, можно сказать, фреймворками. А что, разве нельзя удобно работать с фреймворками (или их подобиями) в С++? Вполне можно, если хорошо разбираться в теме. Другими словами, я думаю, разговоры о новых фичах в С++, это скорее от лени и желании переложить свои проблемы на новые компиляторы. Но они за вас, вашу работу, все равно не сделают. Поэтому, просто ищите альтернативы решений своим задачам.
Вашу статью оценить не могу
Мне это и не надо. Оценку себе я дам сам. А народу я просто даю информацию, которой он может пользоваться, при желании, либо нет. Хотя, говорить можно что угодно. По принципу: «А Васька слушает, да ест».
Главное, это способность выделить часть кода проекта в независимый бинарный модуль. Это нужно для борьбы со сложностью проектирования, удобством отладки, замены модулей без их перекомпиляции, для удобства командной работы, наконец, где каждый отвечает за свой собственный независимый блок кода. При этом конечный проект может не содержать dll вообще, а быть одним только ехе-шником, не считая внешних данных.
Мне и самому интересна иногда такая функциональность (или сценарий использования), но это же две разные программы.
Лично я считаю программы с разными флагами (-O2 и -O3) как разные программы.
Т.е. вы таким образом можете отлаживать одну программу, а у пользователя - другая программа. Обратите внимание!
До работы с пользователями еще не близко. В любом случае, как у нас говорили, это не проблема, а всего лишь задача. Со временем, разберемся.
Хотя, как по мне, программы, может быть, будут и разные, но базовый код то будет один.
Сейчас мне интересно все свои старые проекты оформить в виде модулей. Тогда конструировать можно будет любую сборку, например обучающую программу с поддержкой видео и интерактивного звука, распознавание встроенных субтитров, удобное транскрибирование текстов из изображений, элементарная учетная программа, наконец. Короче, все ограничено только фантазией и количеством модулей.
Очередной курсач на C++ и WinAPI
потребностями собственных задач
для моих задач он слишком большой
для моих задач он пока не нужен
Статья видимо тоже только для Вас и под Ваши задачи писалась)
Какой-то велосипед, прям. Это ИМХО, без обид. Реализация модульности на dll не очень удобна. Потом как это в кучу собирать на целевую платформу? Мейнтейнер повесится))
Какой-то велосипед, прям.
Насчет «велосипеда» я сам писал в начале статьи. Все ведь просто, мне понадобился этот прототип, но в Интернете ничего похожего на хороший демо-проект не нашел. Да, есть опенсорс, с плагинами, но это не для начинающих, явно. А демо-примеры все, без исключения, заточены на консоль с дурацкими функциями в плагинах, типа сложения либо вывод бестолкового текста на ту же консоль.
Поэтому я и написал в статье: «из чего-то, ведь, исходить надо». Никто наши задачи за нас решать не будет. За «так» будут только минусовать либо строить из себе крутого ментора. Но, в таких случаях обычно намекают: «Не говори мне, что мне делать, а я не буду говорить тебе, куда идти!».
Реализация модульности на dll не очень удобна.
Проблему модульности ведь никто еще не решил. Поэтому одна статья тему не закроет. Предлагайте свои идеи, кто же против. Но сводить все к принципу: «Есть два мнения: мое и неправильное!» как то не солидно.
Для меня лично, это вполне удобно. Поэтому, надеюсь на продолжение публикаций, если, конечно, не заминусуют так, что невозможно будет публиковаться. Тогда придется идти на другие сайты, например, буржуйский codeproject.com. Там у меня есть несколько статей, принятых довольно благожелательно, несмотря, на то, что я сам от них не в восторге.
А так, я могу согласиться, что изложение еще не идеальное, код отшлифован не до конца. Однако идея вполне рабочая. Мне, по крайней мере, нравится. Сейчас, в этом стиле, готовлю другую программу, она уже будет заточена под реальное приложение.
Ну, а критика? Как говорится: «Критики боятся, в Интернет не ходить!». Однако, по-видимому, придется меньше отвечать на комментарии, тогда и минусов будет меньше.
Минусы это потому что вы на любой конструктив пишете комментарии в стиле «я художник я так вижу».
Ваши проблемы с модульностью решены очень давно в Qt и «банде четырёх». Но непонятно почему вы считаете при этом фреймворк Qt плохим?
Приведите конкретные проблемы, которые не решены в Qt, но решены у вас. Только без фраз типа «я не разобрался, поэтому кутэ плохой, а мой велосипед хороший».
Минусы это потому что вы на любой конструктив пишете комментарии в стиле «я художник я так вижу».
Ну, это вы так считаете. С моей точки зрения, минусы это элемент агрессии на человека, его взгляды и точку зрения. У меня почему-то нет желания никому ставить минусы, независимо от того, нравится мне чужое мнение или нет. На Политикусе, скажем, минусы и плюсы не анонимные. Всегда видно, кто есть кто. Так, по крайней мере, честнее.
Ваши проблемы с модульностью решены очень давно в Qt и «банде четырёх». Но непонятно почему вы считаете при этом фреймворк Qt плохим
Может быть, не спорю. Но, чаще всего, проблема в терминологии. Если Qt понимает модульность как Python, то это не совсем то, что нужно мне. С другой стороны, я не говорил, что Qt плох. Мне он нравится, писал здесь, что его опенсорный грид один из лучших, а поддержка моего любимого SQLite там встроенная.
Однако Qt слишком объемен, там легко утонуть в коде. Когда я пытался там изменить модель доступа к данным, то это потребовало огромных усилий. Но, если у меня задачи простые, то зачем мне очень мощный, пусть даже и хороший инструмент?
И потом, вы хоть и спец по Qt, но ваша фраза: «Возьмите Qt. Там из коробки есть плагины, причем кросс-платформенные.» меня как-то не устраивает. Вот если бы вы продемонстрировали чей-либо аналог моего демо-проекта на Qt, то это был бы другой разговор. Можно было бы сравнить два проекта. А так, ваш совет мне напоминает фразу из прошлого: «Читайте Ленина / Маркса / Энгельса! У них все есть!!!». Или как сейчас любят советовать: «Ищите в Интернете! Там все есть!». Есть, да не все, больше вопросов, чем ответов. Без конкретной ссылки любые советы подобного рода воспринимаются плохо.
Другой момент, менторство. Оно всегда воспринимается плохо. Нормальный спец даст нормальный совет, без, мягко скажем, приколов. Такая информация всегда будет хорошо воспринята.
Приведите конкретные проблемы, которые не решены в Qt, но решены у вас. Только без фраз типа «я не разобрался, поэтому кутэ плохой, а мой велосипед хороший».
Это не разговор. В таком стиле общаться желания нет. Мне нужен программный конструктор. Добавил плагин (dll), увеличил функционал. Убрал, уменьшил. Только не надо мне ссылок на сложные опенсорсные проекты. Там всегда базовый (главный) модуль уже сам по себе сложен. А плагины часто тоже очень ограничены в своем функционале этим самым главным модулем. Мне такой подход не нравится. Поэтому я упростил задачу до предела, чтобы была видна только суть. Иначе за деревьями можно не увидеть леса. Не нужно на начальном этапе загромождать задачу деталями и фреймворками. Для демонстрации идеи достаточно С++ и WinAPI. Причем, сейчас не время говорить о кроссплатформенности. Это все уже детали и нюансы реализации, в которых, как известно, скрывается Дьявол.
Токсичность автора зашкаливает
Спасибо за статью, но, честно говоря, прочитав заголовок, я ожидал немного другое. Тут скорее "Пример плагиновой архитектуры приложения с использованием WinAPI и C++"
А что именно вы хотели бы узнать?
Модульное программирование в C++. Статические и динамические плагины