В зависимости от минимальных требований вашего приложения к ОС, вы можете динамически связываться с версией MFC или ATL (в случае приложения WTL), включенной в минимальную целевую версию Windows.
И у такого решения есть дополнительное преимущество - всякий раз, когда выходит обновление для системы безопасности используемой библиотеки, вам не нужно обновлять свое приложение, чтобы воспользоваться им.
Но все равно не так уж и ужасно кодировать для чистого Windows API, так что я бы посоветовал вам пойти на это.
Одна проблема заключается в том, что приложения, скомпилированные с более новыми версиями Visual Studio, требуют наличия самой последней библиотеки времени выполнения CRT, которую вы должны загрузить в установщике или заставить пользователя установить ее самостоятельно. Есть способы преодолеть это. Я думаю , что запись в блоге - это та, на которую я наткнулся некоторое время назад. Конечно, вы должны быть осторожны с этим, как если бы вы динамически связывались со старой библиотекой CRT, было бы лучше также кодировать ее заголовки. Может быть, есть способ полностью избавиться от зависимости от CRT.
Редактировать
Я решил уточнить после жаркой дискуссии с Коди Греем ниже, чтобы, возможно, пересказать мои замечания и выдать некоторые предупреждения.
Арендованный входящий
Даже настольное программное обеспечение - это услуга, которую вы должны поддерживать для пользователя после его отправки. Изменяются версии операционных систем, их API и поставляемые библиотеки. У Apple нет проблем с «ломкой» приложений с более новыми версиями OS X и iOS, и разработчики понимают, что им нужно постоянно обновлять свои продукты, иначе они потеряют клиентов или будут слишком заняты вызовами в службу поддержки. Microsoft среди других в «мире большого бизнеса» создала класс программистов, которые думают о программном обеспечении как о зданиях. Вы проектируете это, строите это, кто-то одобряет это, и вы закончите, возможно, поддерживая это еще два года И это не то, что должно быть.
Даже когда кто-то пишет как можно больше приложений, ориентированных на будущее, то есть в зависимости от полностью определенного, общего и документированного поведения целевой операционной системы и любой, которая может последовать за ней, и даже если они статически связаны со всеми библиотеками, которые она использует, они делают его самодостаточным, корректным и одобренным старым , им все же приходится активно поддерживать его на долгие годы. Библиотеки, от которых она зависит, меняются. Они обновлены, улучшены, исправлены ошибки, исправлены уязвимости, обновлено, удалено исправленное или обобщенное поведение, зависящее от ОС.
Даже если приложение зависит от абсолютно минимального набора системных библиотек, все вышеперечисленное также применимо.
Таким образом, независимо от того, должно ли ваше приложение использоваться в течение ограниченного времени или нет, вы должны предположить и запланировать , что вам придется поддерживать его , если что-то изменится, что связано с вашим приложением , Даже если это чистое приложение Win32 API, вам придется проверить, как оно ведет себя в более новой версии Windows, предоставляет ли оно элементы или службы пользовательского интерфейса, которые пользователи этой новой ОС ожидают от своих приложений.
И, сказав, что, если вы не идете по чистому маршруту Win32 API, помните о компромиссах, которые вы делаете , когда и , если , используя любой из хаков, которые я первоначально упоминается.
Даже если ваш проект приводит к одноразовому приложению. Даже если только для того, чтобы заглянуть в будущее.