Работа с дескрипторами

Примечание

Предупреждение

При вызове функции необходимо заранее указать размер возвращаемой строки, чтобы выделить память на ее хранение. В противном случае при записи строки в память можно испортить важную информацию, используемую основным приложением и даже операционной системой, что может привести к сбою в их работе. Если предварительно задать размер строки то функция вводит в строку только то количество данных, которое определено заданным размером строки.

Public Sub PrintTempPathO Dim sThePath as String Dim iPathLength as Long Dim lResult as LongiPathLength =256sthePath = String$(iPathLength,0)lResult = GetTempPath(iPathLength,sThePath)End Sub

Значения, возвращаемые функциями Win32 API

Большинство подпрограмм Win32 API являются функциями. Возвращаемое значение - это либо данные, например, возвращаемое функцией GetDriveType () значение, либо просто результат выполнения функции: успешно или не успешно. Например, рассмотрим функцию SetCurrentDirectory (), которая устанавливает текущую папку:

Dim lReturn as long

lReturn = SetCurrentDirectory(С:\WORK")

Если функция установила папку "C:\WORK" текущей, то переменная lReturn имеет значение отличное от 0. В противном случае, например, если каталог не существует, переменной lReturn присваивается значение 0.

Одни функции Win32 API возвращают значение 0 в случае успешного завершения, а другие - в случае ошибки. Подробную информацию о возвращаемых функциями Win32 API значениях смотрите в документации по Win32 SDK.

Кроме того, некоторые функции присваивают значение передаваемому в них параметру, а также имеют возвращаемое значение. Рассмотрим функцию GetPrivateProfile (), которая используется для чтения данных из файла INI, хранящего информацию о конфигурации 16-битных приложений Windows:

Dim lSize as longDim strSize as long Dim strValue as string strSize = 256 StrValue = String$ (strSize, 0)lSize = GetPrivateProfileString ("CoolApplication", _ "ApplicationPath", "", strValue, strSize, "C:\MYINI.INI")

Функция GetPrivateProfile () извлекает значение параметра ApplicationPath раздела CoolApplication и присваивает его строковой переменной strValue, которая передается в функцию в качестве параметра. Кроме того, в переменную lSize записывается длина строки, присвоенной переменной strValue. Необходимо отметить, что если при выполнении функции GetPrivateProfile () возникает ошибка, то переменной lSize присваивается значение Null.

Gри работе с Win32 API используются дескрипторы. Дескриптор - это 32-битное целое число, которое однозначно идентифицирует компоненты, используемые при программировании Win32 API, например, диалоговые окна, элементы управления в них, окна, битовые изображения, кисти, используемые для рисования картинок на экране, аппаратные средства. Необходимо отметить, что компоненту сначала назначается дескриптор, а затем этот дескриптор используется для работы с компонентом. Имена дескрипторов обычно задают имена, начинающиеся с префикса h.

В следующем описании параметр hWnd используется для задания дескриптора окна:

Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg_ As MSG, ByVal hwnd As Long, ByVal wMsgFilterMin В As Long, ByVal _ wMsgFilterMax As Long) As Long

В следующем описании параметр hDevice является дескриптором конфигурации устройства:

Declare Function DeviceIoControl Lib "kerne132" Alias _ "DeviceIoControl" (ByVal hDevice As Long, ByVal dwIoControlCode As _ Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer _ As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, _ lpOverlapped As OVERLAPPED) As Long

При работе с дескриптором в VBA требуется только знать, где его указывать: обычно одна функция возвращает дескриптор компонента, а затем этот дескриптор используется для работы с элементом в других функциях.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: