Windows’95 и Windows NT, Сходства и различия, страница 9

Многие функции Windows используют общий механизм возврата ошибок. При возникновении ошибки эти функции устанавливают значение ошибки для определенного потока, которое можно получить, вызвав функциюGetLastError. 32-разрядные значения, возвращаемые этой функцией, определены в файле заголовковwinerror.h или в файле заголовков определенной библиотеки.

В приложении также можно установить это значение ошибки, вызвав функциюSetLastError. В определяемых приложениями кодах ошибок должен быть установлен разряд 29; коды ошибок с этим разрядом зарезервированы операционной системой для использования приложениями.

Использование стандартных функций библиотеки C/C++

Приложения Win32 могут использовать множество стандартных функций библиотеки C/C++, хотя и с некоторыми ограничениями.

Первое и основное — Windows-приложения обычно не имеют доступа к традиционным потокамstdin, stdout и stderr, соответствующим дескрипторам файлов DOS (0, 1 и 2) или объектам C++iostream (cin и cout). Эти дескрипторы файлов могут использовать только консольные приложения. (Однако приложения Windows все же могут открыть стандартный ввод или стандартный вывод, если они запускаются с переназначенным вводом/выводом.)

Как уже упоминалось, приложения Windows должны использовать для обработки файлов функции работы с файлами Win32. Это не говорит о том, что стандартный поток С и низкоуровневые функции ввода/ вывода или библиотека C++iostream не доступны. Эти библиотеки не поддерживают всех возможностей, доступных в Win32 API. Например, функции библиотек C/C++ не знакомы со свойствами безопасности файловых объектов, они не могут быть использованы для операций асинхронного, перекрывающего ввода и вывода.

Приложения также должны воздерживаться от использования функций управления процессами в стиле MS-DOS (семейства функций ехес), предпочитая использованиеCreateProcess.

Большинство других библиотек C/C++ можно использовать без ограничений. В частности, хотя Win32 API предлагает более богатое множество функций для управления памятью, большинство приложений не нуждается в более совершенном обслуживании, чемnialloc или оператор C/C++new. Можно безопасно использовать математические функции, функции работы с буфером, со строками, классификацию символов и байтов, преобразование типов C/C++.

Приложениям Win32 не следует использовать прерывание с номером 21 MS-DOS или функции IBM PC BIOS. API, которые были доступны для этих целей в 16-разрядной Windows, теперь удалены. Приложения, требующие низкоуровневого доступа к аппаратным устройствам, лучше разрабатывать, используя соответствующий DDK (device driver development kit).

Отличия платформ

Хотя интерфейс Win32 API предполагался независимым от платформы, некоторые отличия платформ все-таки существуют из-за ограничений основной операционной системы. Некоторые из них уже упоминались в этой главе, а данный раздел содержит обзор возможностей, характерных для платформ Windows NT или Windows 9x.

Среда разработчика Visual C++ не только может быть использована для обеих этих платформ, она также может быть инсталлирована на них. Автор решил изложить некоторые замечания, отражающие его опыт разработки программного кода с использованием обеих операционных систем.

Windows NT

Наиболее полную реализацию Win32 API можно найти в Windows NT. Начиная с версии 3.51 Windows NT поддерживает множество новых пользовательских элементов управления, доступное в Windows 95.

Windows NT предлагает поддержку уникода (Unicode), дополнительные возможности защиты и системную поддержку резервного копирования на ленточных накопителях. Разрабатываемая как серверная платформа, Windows NT, естественно, предлагает гораздо более богатую серверную среду, чем Windows 95. Благодаря полной 32-разрядной реализации. Windows NT также является более стабильной, идеально подходящей для системы разработки.

Windows NT известна своей расточительностью памяти и процессора. Версия 4.0 представила приятный сюрприз в этом отношении — неожиданно NT стала такой же отзывчивой и быстрой при работе с графикой, как и Windows 9x. Хотя она все так же требует большого объема памятью, ее управление памятью теперь более эффективно. На практике хорошая система на базе NT должна иметь 32 Мб оперативной памяти, 1 Гб дискового пространства и процессор Pentium.