Типы данных, используемые в Win32-приложениях
Мобильность программ и их независимость от конкретной платформы во многом обеспечивается введением новых стандартных типов данных - определенных на основе простых типов языка программирования Си. Имена стандартных типов данных состоят из символов верхнего регистра.
Ниже приведен список наиболее распространенных типов: симовольных, целых, булевских, указателей и описателей (handles). Символьные, целые и булевские типы соответствуют аналогичным типам большинства диалектов языка Си. Имена типов-указателей содержат префикс "P" или "LP". Описатели имеют отношение к ресурсам, загруженным в память.
Наиболее часто используются следующие типы данных:
· BOOL - булевская переменная ( TRUE или FALSE );
· CHAR - 8- разрядный символ;
· DWORD - 32-разрядное беззнаковое целое;
· HANDLE - описатель объекта;
· INT - 32-разрядное целое;
· LPSTR - указатель на строку 8-разрядных символов, заканчивающуюся нулем;
· LPTSTR - LPWSTR в случае Unicode или LPSTR в случае ANSI;
· LPVOID - указатель на любой тип;
· LPWSTR - указатель на строку 16-разрядных (Unicode) символов, заканчивающуюся нулем;
· WCHAR, в случае Unicode или CHAR в случае ANSI;
· WCHAR - 16-разрядный Unicode символ;
· WORD - 16-разрядное беззнаковое целое.
Остальные типы данных будут изучаться по мере необходимости.
Обработка ошибок
Профессиональная разработка программных приложений предполагает включение кода для корректного восстановления после потенциальных ошибок. В случае возникновения ошибки система может справиться с ней самостоятельно, но в экстремальных ситуациях может потребоваться вмешательство пользователя.
Вызываемая Win32-функция может возвратить значение, свидетельствующее об ошибке (например, NULL для функций типа HANDLE или ноль для функций типа BOOL). В таких случаях можно попытаться выявить тип ошибки при помощи функции GetLastError - она возвращает код последней ошибки, который хранится в локальной памяти потока, вызвавшего ошибку. Коды ошибок (а их более 10 тысяч), представляющие собой 32-битные числа, находятся в заголовочном файле WinError.h.
Если приложение содержит функции, к которым обращаются другие программы, то желательно, чтобы эти функции синтезировали код ошибки в случае возникновения ошибочных ситуаций, то есть вели себя подобно функциям Win32 API. Это можно сделать при помощи функции SetLastError.
Для преобразования кода ошибки в ее содержательное описание предназначена Win32-функция FormatMessage.
Прогон программы, синтезирующей информацию об ошибке, которая имитирует отсутствие нужного файла
//Практическая работа № 16
//Группа xxxxxx Терминал N ФИО
#include “windows.h”
#include “stdio.h”
void GetError() {
DWORD dw = GetLastError(); //Получение кода последней ошибки
printf("GetLastError returned %u\n", dw); //Печать кода последней ошибки
}
void SetError() {
DWORD dw = ERROR_FILE_NOT_FOUND;//Выбор кода ошибки
SetLastError (dw);//Установка кода ошибки
}
void main() {
printf("Hello world \n");
SetError();// Вызов установщика кода ошибки
GetError();// вызов Расшифровщика кода ошибки
}
/* При выполнении данной практической работы я освоил
.
*/
Рекомендуется реализовать данную программу и сверить номер выдаваемой ошибки с соответствующим перечнем в MSDN или файле заголовка WinError.h.
Заключение
В данной лекции рассмотрены вопросы, важные с точки зрения практического освоения ОС Windows и разработки Win32-приложений. Основным источником сведений об API системы является справочная система MSDN. Разработчику приложений необходимо владеть средствами разработки и отладки, знать основные типы данных и форматы хранения текстовых строк, а также правильно обрабатывать ошибки. Дополнительным источником сведений о системе являются разнообразные инструментальные средства.
Вопросы :
1.Что такое Win32 API ?
(Win32 API предоставляет всеобъемлющий интерфейс, позволяющий выполнить каждое действие несколькими способами и покрывающий все области, с которыми должна работать операционная система.)