C ++ GUI без рамок - PullRequest
       4

C ++ GUI без рамок

8 голосов
/ 11 марта 2012

Итак, насколько я понимаю, нет способа создать графический интерфейс C ++ и отправить ваше приложение в виде отдельного исполняемого файла.Все сторонние фреймворки добавляют свои зависимости в виде .dll-s и т. Д., Будь то MFC, Qt, WTL, wxWidgets, GTK.Это оставляет мне только одно решение - самостоятельно разрабатывать графический интерфейс для моего текущего приложения, используя Win32 API.Мои предположения верны или я что-то упустил?Мне всегда было интересно, как uTorrent и некоторым другим удалось это сделать.Спасибо.

Ответы [ 3 ]

7 голосов
/ 11 марта 2012

Нет, вы можете статически связывать большинство популярных платформ GUI, включая MFC, Qt, ATL / WTL и wxWidgets.Я не знаю о GTK, но я предполагаю, что вы, вероятно, тоже можете статически связывать его.

Статическое связывание означает, что вместо динамического связывания с библиотечным кодом, находящимся в DLL, вы связываете этот код непосредственноВаш исполняемый файл, в результате чего получается отдельный автономный EXE-файл, который вы можете отправить без каких-либо внешних зависимостей.

Но, конечно, эти зависимости по-прежнему будут , и они будут увеличивать размер вашегоисполняемый файл, который может быть проблемой, в зависимости от вашего механизма развертывания.Кроме того, есть что сказать о программировании, близком к металлическому, поэтому использование Win32 API напрямую является опцией.Это даст самое маленькое, самое легкое из возможных приложений и, возможно, самое быстрое.На самом деле, я считаю, что это именно то, что делает µTorrent (или, по крайней мере, это то, что они делали несколько версий назад).

1 голос
/ 11 марта 2012

Некоторые платформы позволяют создавать самодостаточный «автономный монолит» EXE без каких-либо дополнительных зависимостей (кроме очевидного API, предоставляемого ОС).Например, в MFC у вас есть возможность «статического» или «динамического» использования MFC.Первый вариант означает, что все необходимые вещи будут связаны с вашим EXE-файлом.

0 голосов
/ 11 марта 2012

В зависимости от минимальных требований вашего приложения к ОС, вы можете динамически связываться с версией MFC или ATL (в случае приложения WTL), включенной в минимальную целевую версию Windows.

И у такого решения есть дополнительное преимущество - всякий раз, когда выходит обновление для системы безопасности используемой библиотеки, вам не нужно обновлять свое приложение, чтобы воспользоваться им.

Но все равно не так уж и ужасно кодировать для чистого Windows API, так что я бы посоветовал вам пойти на это.

Одна проблема заключается в том, что приложения, скомпилированные с более новыми версиями Visual Studio, требуют наличия самой последней библиотеки времени выполнения CRT, которую вы должны загрузить в установщике или заставить пользователя установить ее самостоятельно. Есть способы преодолеть это. Я думаю , что запись в блоге - это та, на которую я наткнулся некоторое время назад. Конечно, вы должны быть осторожны с этим, как если бы вы динамически связывались со старой библиотекой CRT, было бы лучше также кодировать ее заголовки. Может быть, есть способ полностью избавиться от зависимости от CRT.

Редактировать

Я решил уточнить после жаркой дискуссии с Коди Греем ниже, чтобы, возможно, пересказать мои замечания и выдать некоторые предупреждения.

Арендованный входящий

Даже настольное программное обеспечение - это услуга, которую вы должны поддерживать для пользователя после его отправки. Изменяются версии операционных систем, их API и поставляемые библиотеки. У Apple нет проблем с «ломкой» приложений с более новыми версиями OS X и iOS, и разработчики понимают, что им нужно постоянно обновлять свои продукты, иначе они потеряют клиентов или будут слишком заняты вызовами в службу поддержки. Microsoft среди других в «мире большого бизнеса» создала класс программистов, которые думают о программном обеспечении как о зданиях. Вы проектируете это, строите это, кто-то одобряет это, и вы закончите, возможно, поддерживая это еще два года И это не то, что должно быть.

Даже когда кто-то пишет как можно больше приложений, ориентированных на будущее, то есть в зависимости от полностью определенного, общего и документированного поведения целевой операционной системы и любой, которая может последовать за ней, и даже если они статически связаны со всеми библиотеками, которые она использует, они делают его самодостаточным, корректным и одобренным старым , им все же приходится активно поддерживать его на долгие годы. Библиотеки, от которых она зависит, меняются. Они обновлены, улучшены, исправлены ошибки, исправлены уязвимости, обновлено, удалено исправленное или обобщенное поведение, зависящее от ОС.

Даже если приложение зависит от абсолютно минимального набора системных библиотек, все вышеперечисленное также применимо.

Таким образом, независимо от того, должно ли ваше приложение использоваться в течение ограниченного времени или нет, вы должны предположить и запланировать , что вам придется поддерживать его , если что-то изменится, что связано с вашим приложением , Даже если это чистое приложение Win32 API, вам придется проверить, как оно ведет себя в более новой версии Windows, предоставляет ли оно элементы или службы пользовательского интерфейса, которые пользователи этой новой ОС ожидают от своих приложений.

И, сказав, что, если вы не идете по чистому маршруту Win32 API, помните о компромиссах, которые вы делаете , когда и , если , используя любой из хаков, которые я первоначально упоминается.

Даже если ваш проект приводит к одноразовому приложению. Даже если только для того, чтобы заглянуть в будущее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...