Создавая приложения для Windows, программист очень часто не имеет прямого доступа к тем объектам, с которыми он работает, так как Windows заставляет использовать так называемый Интерфейс Разработки Приложений (Application Programming Interface — API), состоящий из сотен функций, через которые программист «общается» с системой. Самым важным понятием В WinAPI является описатель (Handle). Описатель представляет собой 32-разрядное целое число, связанное с некоторым объектом Windows, причем все взаимодействия программы с этим объектом происходит посредством функций API, одним из параметров которых является описатель, т.е. можно сказать, что описатель — это связующее звено между логически и физическим объектами. В Delphi тип-описатель представляет собой число типа LongInt. Для описателей определен тип THandle:
type THandle : LongInt;
Кроме типа THandle в Delphi поддерживаются также имена типов, пришедшие из С++, а именно: HWND, HMENU, HKEY и другие имена, начинающиеся с префикса H (Handle); все эти типы определены так: type h<name> = THandle , так что записи M : THandle и M : HWND эквивалентны. Заимствованные имена типов используются для улучшения читабельности программы.
Windows писалась на языке С++, в котором отсутствует строковой тип как таковой и вместо него используются символьные массивы (признаком конца строки служит символ с кодом нуль), поэтому для совместимости с такими строками в Delphi поддерживается тип PChar. Физически тип PChar является просто указателем на символ (^char), однако у него гораздо больше свойств, чем у простого указателя . Во-первых, переменная типа PChar может рассматриваться как массив символов с нулевой базой и наоборот, т.е. если вам нужно передать в некоторую функцию переменую типа PChar, вы можете пойти двумя путями:
|
|
Эти два кода эквивалентны, первый обычно используется в случае, когда длина передаваемой строки не превосходит некоторого небольшого числа; второй тип кода используется, когда размер получаемой строки не известен на момент объявления переменной.
Во-вторых, если у вас есть переменная типа PChar, то вы можете извлекать нужный символ из неё так, как если бы переменная была массивом:
Для работы с типом PChar в Delphi существует ряд функций, начинающихся с префикса Str (StrPas и т.д.), полный их список можно увидеть в справке по Delphi. Все эти функции расположены в модуле sysutils.
Для преобразования string-строк в PChar служит функция StPCopy, хотя однако иногда удобнее использовать следующий трюк:
Var s : String; Begin s:='Example'; SomeFunc(@s[1]); End; |
Мы просто передаем в процедуру адрес первого символа текстовой строки, при этом конечный нулевой символ уже существует в конце string-строки. Для обратного преобразования существует функция StrPas, однако допустимо и простое присваивание string-строке строки с завершающим нулём.
CallBack functions или функции обратного вызова — это функции, код которых пишете вы, но вызывает их Windows. Эти функции отличаются от остальных тем, что в заголовке у них добавлено ключевое слово stdcall, это ключевое слово заставляет компилятор генерировать особый вид кода. Примером такой функции может служить оконная процедура.
Процессом в Windows называется любое выполняющееся приложение либо библиотека. Любой процесс имеет свой уникальный описатель, причем значение этого описателя представляет собой адрес с которого приложение либо библиотека загружены в память.
Потоком в Windows называется тот «путь», по которому идет программа, например, при запуске процесса создается поток называемый главным. Также под потоком можно понимать кусок программного кода, выполняющийся независимо от других кусков.