Как писать программы для Windows xp

Что-то я решил молодость вспомнить. Перед тем, как меня понесло в сторону Perl, юниксов и всякой функциональщины, я долгое время игрался с сями, ассемблером и WinAPI. Сейчас все это начинает потихоньку забываться, а жаль, потому что, как мы уже выясняли, знать всякие низкоуровневые вещи полезно.

Предвижу возмущение некоторых читателей сего блога, дескать, что за дела, я не хочу читать про WinAPI, я хочу ФП и юниксы! Если вы оказались одним из них, пожалуйста, пройдите по приведенной выше ссылке и внимательно ознакомьтесь с тамошней заметкой, она вам все объяснит. Хорошая новость для новичков — при помощи серии постов о WinAPI, которую я планирую написать, вы можете начать изучение программирования практически с нуля. Впрочем, прочитать сначала книжку Кернигана и Ритчи, а также иметь представление о том, как язык Си хранит в памяти целые числа и строки, не повредит.

Для написания кода я буду использовать Windows XP, запущенный под Ubuntu Linux в VirtualBox, и среду разработки Visual Studio 2005. Если вы тоже не сидите под Windows, советую выбрать такую же конфигурацию, поскольку более поздние версии Visual Studio и Windows требуют крайне много ресурсов. Обязательно установите гостевые дополнения, это позволит использовать в Windows такое же разрешение экрана, что и в хост-системе.

Современные приложения на Windows XP-как это работает?

Если даже WinXP для вас тяжеловата, подойдут Windows 2000 и Visual C++ 6.0. Несмотря на то, что я буду использовать не самые свежие Windows и Visual Studio, по идее все должно прекрасно работать и в более поздних их версиях. Кроме того, не должно составить большого труда воспроизвести мои действия в каком-нибудь wxDev-C++ или даже Borland Delphi. Писать будем на Си, возможно, лишь изредка прибегая к некоторым фишкам C++.

Дополнение: Надо отдать должно Microsoft, самые актуальные на середину 2017-го года Windows 10 и Visual Studio Community довольно шустро работают в условиях ограниченных ресурсов под VirtualBox. Более того, Visual Studio Community доступна для скачивания совершенно бесплатно.

Установить Visual Studio несложно. Будем считать, что с этим вы справились. Давайте создадим новый проект. Запустите Visual Studio и выберите в меню File → New → Project. В появившимся диалоге выберите Visual C++ → Win32 → Win32 Project.

В поле Name введите какое-нибудь название проекта, например, First. Жмите OK, Next, Finish. В результате будет создан каркас проекта. Обратите внимание на выпадающий список с конфигурациями проекта по центру экрана. Выберите в нем конфигурацию Release:

Выбираем Release-конфигурацию проекта в Visual Studio

Для компиляции программы нажмите F7. Для ее запуска нажмите Ctr+F5. Если вы используете VirtualBox, обратите внимание, что правая клавиша Ctr используется в хоткеях, управляющих виртуальной машиной. Например, сочетание Ctr+F служит для переключения между оконным и полноэкранным режимами. Поэтому, если вы решили использовать VirtualBox, используйте в хоткеях Visual Studio клавишу Ctr, находящуюся слева.

Если теперь перейти в каталог с проектом и найти собранную программу (она находится в подкаталоге с именем release), можно обнаружить, что ее размер составляет 64 Кб. По нынешним меркам это не так уж много, но все-таки что-то многовато для программы, всего лишь рисующей окошко с менюшкой. Мы же собираемся писать на Си и WinAPI, а одним из преимуществ этого подхода является возможность писать очень компактные программки.

Давайте разберемся, как это делается:

  • Закройте текущий проект: File → Close Solution;
  • Создайте новый проект с именем Project, в визарде поставьте галочку Additional Options → Empty Project;
  • Выберите конфигурацию Release;
  • Создайте новый файл исходного кода, сказав Project → Add New Item… → Visual C++ → Code → C++ File (.cpp), с именем Main;
  • Откройте свойства проекта: Project → Project Properies…;
  • Отключите проверку безопасности буфера: C/C++ → Code Generation → Buffer Security Check → No;
  • Сообщите, что мы пишем код на Си: С/C++ → Advanced → Compile As → Compile As C Code;
  • Игнорируем библиотеки по умолчанию: Linker → Input → Ignore All Default Libraries → Yes;
  • В качестве точки входа указываем процедуру main: Linker → Advanced → Entry Point → main;
  • Отключаем отладочную информацию: Linker → Debugger → Generate Debug Info → No;
  • Отключаем генерацию манифеста: Liner → Manifest File → Generate Manifest → No;
  • Жмем Apply, затем OK;
Читайте также:
Программа для обновления Windows 7 и 8 1

Теперь, если вы напишите в Main.cpp код:

… и скомпилируете его, то получите абсолютно ничего не делающий исполняемый файл Project.exe, размером ровно 1 Кб. Программа получилась такой маленькой, потому что мы выкинули из нее систему времени исполнения языка C++, а также отладочную информацию и прочий «мусор». Фактически, это минимальный размер исполняемого файла в Windows, поскольку он должен содержать некоторую служебную информацию (DOS-заглушку, PE-заголовок, таблицу секций) и иметь некоторое выравнивание. Можно ужать его еще чуть-чуть, но этим мы рискуем сломать совместимость с некоторыми версиями Windows.

Чтобы при создании каждого нового проекта не повторять описанные выше шаги, закройте проект и сохраните его в архиве с названием типа project_template.zip. Теперь попробуем на основе этого проекта создать программу, которая что-то делает. Разархивируйте проект, переименуйте его каталог из Project в MsgBox, откройте проект в Visual Studio. Введите следующий код:

void main ( ) {
MessageBox ( 0 , L «Hello!» , L «MsgBox» , 0 ) ;
ExitProcess ( 0 ) ;
}

Заметьте, что VisualStudio может дополнять имена процедур, если при их вводе нажать Ctr+пробел. Для сохранения кода используйте сочетание Ctr+S. При вводе аргументов процедур отображается подсказка.

Если теперь вы запустите программу, то увидите примерно следующее:

Пример использования MessageBox

Размер exe-шника при этом составил 2 Кб. Можно уменьшить его до 1 Кб, добавив в самом начале кода строку:

#pragma comment(linker, «/MERGE:.rdata=.text»)

Этим мы говорим компилятору объединить несколько секций исполняемого файла в одну. Но мне кажется, что это уже перебор, файл и так получился крохотный. Есть и другие приемы, но нам вполне хватит описанных выше.

Приведенный выше код довольно прост. Заголовочный файл windows.h содержит объявление процедур, структур и констант, необходимых для работы с WinAPI. Процедура ExitProcess завершает текущий процесс с кодом возврата, переданным в качестве аргумента. Процедура MessageBox отображает окно с сообщением. Первый и последний ее аргументы сейчас не важны.

Второй по счету аргумент представляет собой строку с сообщением, а третий — заголовок окна.

Префикс L перед открывающей кавычкой означает, что строка хранится в unicode. В действительности, есть две версии процедуры MessageBox — MessageBoxA, работающая с ascii-строками, и MessageBoxW, работающая со строками в unicode. Аналогичная ситуация характерна и для большинства других процедур WinAPI.

По умолчанию в свойствах проекта сказано использовать unicode-версии процедур, поэтому во время сборки проекта компилятор подменяет вызов MessageBox на MessageBoxW. На низком уровне ascii-процедуры представляют собой всего лишь обертки над unicode-версиями (для преобразования строк из unicode в ascii и обратно в Windows используются процедуры MultiByteToWideChar и WideCharToMultiByte). Работая с процедурами, имена которых заканчиваются на «W», мы получаем более быстрые программы.

В заключение хочется отметить, что приведенный код успешно компилируется MinGW и запускается под Wine:

$ i586-mingw32msvc-gcc -s -DUNICODE msgbox.c -o msgbox.exe
$ wine msgbox.exe

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

Собственно, это все, о чем я хотел сегодня рассказать. В качестве домашнего задания можете почитать документацию к MessageBox на MSDN. Попробуйте отобразить окна с различными иконками и кнопками, а также по коду возврата определить, какая из кнопок была нажата.

Как всегда, буду рад ответить на ваши вопросы. И заодно скажите, насколько вообще все это вам интересно?

Читайте также:
Программы для того чтобы узнать пароль на Windows 7

Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.

Источник: eax.me

Разработка приложений для Windows XP в Visual Studio 2017 + Windows 10?

Есть потребность в том, чтобы моя программа имела полноценную поддержку Windows XP. Как реализовать эту поддержку в Visual Studio 2017, которая установлена в среде Windows 10?

Отслеживать
20.1k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак
задан 23 сен 2018 в 15:53
Super_Puper_User Super_Puper_User
293 3 3 серебряных знака 21 21 бронзовый знак
windows xp мертв
23 сен 2018 в 15:58

23 сен 2018 в 15:59
На каком языке пишете? C#, C++?
23 сен 2018 в 16:29
C++.

С C# всё проще, просто скачай Framework
25 сен 2018 в 22:08

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

  1. Установите набор инструментов для построения под WinXP.

Запустите инсталлятор Visual Studio (через пункт «Изменить» в «Программах и компонентах»), на странице «Компоненты» установите галку Windows XP support for C++, нажмите «Установить».

  1. Измените свойства проекта

На вкладке «Общие» в поле «Набор инструментов платформы» («Platform toolset») выберите Visual Studio 2017 — Windows XP (v141_xp)

  1. Не используйте API, которые отсутствуют в Windows XP (например, DWM API, Multimedia Device API, Speech Recognition API, IMAPI, Network List Manager и др.)

Отслеживать
ответ дан 26 сен 2018 в 11:22
MSDN.WhiteKnight MSDN.WhiteKnight
20.1k 6 6 золотых знаков 37 37 серебряных знаков 81 81 бронзовый знак

  • c++
  • visual-studio
  • windows-xp
    Важное на Мете

Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник: ru.stackoverflow.com

Запуск (сборка) приложения Qt для Windows XP

Запустить приложение Qt на win xp

Иногда может случиться такая ситуация, что необходимо скомпилировать и в будущем запустить ваше приложение, разработанное в среде Qt Creator в устаревшей Windows XP. Разберём в этой статье, как это сделать.

И вот, ваши дела шли чудесно, но в один день вам захотелось/понадобилось запустить ваше приложение в Windows XP. «Элементарно» — подумали вы, но тут не так всё просто. Перейдя на официальную вики Qt , в статью по поддержке платформ (https://wiki.qt.io/PlatformSupport), можно увидеть, что в таблице официальная поддержка Win Xp есть в версия Qt с 5.0 по 5.6.

Поэтому самым простым и действенным способом будем скачивание Qt, например, версии 5.5.1 (qt-opensource-windows-x86-mingw492-5.5.1.exe) с репозитория https://download.qt.io/archive/qt/5.5/5.5.1/ и установка на свой ПК (если у вас стоит более новая версия).

Будем использовать такую связку: Qt+MinGW 4.9.2 32 bit, что и укажем во время установки Qt.

После установки, запустим Qt и откроем проект и на экране появится следующий предупреждающий диалог (необходимо нажать кнопку «ок»):

Далее необходимо выбрать компилятор и нажать кнопку «Настроить проект». Если вдруг у вас после установки определился не тот компилятор, отладчик или комплект, то вы можете воспользоваться методикой из статьи http://2compa.ru//qt-creator/kak-ustanovit-mingw-7-3-0-32bit-dlja-qt-creator-5-12-0/ , где я рассказывал, как вручную настроить MinGW 7.3, но по такой же методике, вы сможете в параметрах сборки и запуска, настроить свой комплект Qt.

Добавим в файл .pro следующую строку:

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

Попробуем скомпилировать проект. В моём случае проект небольшой (2500 строк) и он удачно скомпилировался. Бинго! Программа запущена. В вашем случае компилятор может выдавать ошибки (из-за разности версий и меняющегося Qt-функционала), которые придётся исправлять.

Для этого, пользуйтесь гуглом.

Небольшая оговорка: Qt 5.5.1 у меня почему-то не запустился на Win XP, но запустился на Win 7, а затем после того как я собрал все необходимые .dll, программа запустилась и на Win XP (с пакетом обновления 3).

Как собрать .dll в одном месте для программы, написанной в Qt, чтобы запустить на Win XP?

1 Вариант. Windeployqt

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

Читайте также:
Какие расширения имеют файлы программ Windows

Диск:Путь установки QtВерсия Qtmingw***_**bin.

Чтобы это сделать откройте два окна проводника, в одном папку релиза вашего проекта, в котором оставьте просто .exe файл. А во втором окне путь с инструментом, указанным выше.

И перетащите файл с названием вашего проекта на файл windeployqt.exe. Далее пойдёт процесс копирования необходимых файлов в папку с исполняемым файлом.

Конечно, у этого инструмента есть недостаток. Недостаток заключается в том, что он копирует не все необходимые .dll и с высокой долей вероятности ваша программа при запуске может выдать системную ошибку, вроде такой:

Для исправления такой ошибки, нужно скопировать файл libgcc_s_dw2-1.dll в каталог с программой (этот файл находится по пути инструмента windeployqt). Соответственно, эту процедуру нужно сделать для всех ошибок такого рода. После этого, программа должна успешно запуститься по нажатию на исполняемый файл.

2 Вариант. LibraryCollector (раньше назывался DLLCollector)

Скачиваем DLLCollector или LibraryCollector (по моим ощущениям более старый DLLCollector работает стабильнее). Скачать LibraryCollector вы можете по следующей ссылке с киберфорума. А устаревшую DllCollector можете скачать по прямой ссылке с моего блога.

Запускаем утилиту (обязательно от имени администратора) и указываем пути:

name – путь к исполняемому файлу.

bin – путь к папке bin в папке mingw***_** по пути с Qt Creator.

plugins – путь к папке plugins в папке mingw***_** по пути с Qt Creator.

to – путь к папке, в которую будут копироваться dll и исполняемый файл.

Нажимаем кнопку «Run», ваша программа должна запуститься. Далее закройте программу и нажмите кнопку «Update». Далее вам необходимо выполнять действия в программе, чтобы утилита определила все файлы, необходимые для работы вашей программы, которые отобразятся в списке:

Закройте программу и нажмите кнопку «Copy». Все необходимые для работы .dll скопируются в папку с вашим исполняемым файлом. Поздравляю!

Небольшие ХАКИ для запуска приложения в WIN XP. Исправление ошибки « Не является приложением Win32».

Если вы используете Qt вместе с Visual Studio (а не компилятором MinGW) и пытаетесь развернуть свое приложение на компьютере под управлением Windows XP или Windows Server 2003, скорее всего, вы видите эту ошибку.

Эта ошибка не возникнет для Qt с Visual Studio 2010, но появляется при использовании Visual Studio 2012, 2013 или Visual Studio 2015.

Самый простой способ это исправить – добавить одну дополнительную строку в файл .pro вашего проекта. Второй способ – выполнить бинарное исправление файла .exe вашего приложения.

Небольшое примечание: Эта же ошибка («…не является приложением Win32») возникает при попытке запустить 64-разрядное приложение в 32-разрядной системе Windows XP или Windows 2003, поэтому убедитесь, что ваше приложение действительно 32-разрядное. Один из способов проверки разрядности: запустите приложение в Windows 7 или 10, запустите диспетчер задач, на вкладке процесса проверьте, что имя вашего приложения имеет суффикс «*32».

Для первого способа достаточно открыть .pro файл вашего проекта и добавить туда следующую строку:

QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01

Примечание: если вы компилируете 64-битный файл .exe (и, таким образом, нацелены на 64-битную Windows XP), вместо этого вам следует установить для QMAKE_LFLAGS_WINDOWS значение /SUBSYSTEM:WINDOWS,5.02.

Второй способ – более экзотический, для этого воспользуемся редактором двоичных / шестнадцатеричных файлов. Откройте файл .exe вашего приложения, перейдите почти к началу файла и отыщите шестнадцатеричную последовательность 06 00 00 00 00 00 00 00 (повторяется один раз). Эта строчка находится по адресу 0000130, но может находиться между 0000120 и 0000150. Замените её на 05 00 01 00 00 00 00 00.

Примечание: если это 64-битный файл .exe, вместо этого вы должны изменить строку на 05 00 02 00 00 00 00 00.

Сохраните exe файл и он должен запуститься. Специально для вас записал видео, как запустить exe вне QT:

Источник: 2compa.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru