Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответ - Екзаменаційні питання з курсу ОС.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Функция Sleep

Функция Sleep из библиотеки Kernel32.dll приостанавливает выполнение приложения на указанное количество миллисекунд. Вот её прототип:

VOID Sleep(

DWORD dwMilliseconds // "Время сна" в миллисекундах

);

А вот объявление этой функции в Visual FoxPro:

DECLARE Sleep IN WIN32API Long Milliseconds

Пример вызова функции Sleep из вашего приложения:

FUNCTION ToSleep(tnMilliseconds)

DECLARE Sleep IN WIN32API Long

Sleep(tnMilliseconds)

ENDFUNC

Функции для работы с guid

GUID (Global Unique ID), он же UUID, он же ClsID - глобальный идентификатор, представляющий собой двоичный тип данных длиной 16 байт. Microsoft гарантирует уникальность значения GUID на всей Земле в течение обозримого будущего. В Windows существует достаточное количество функций, генерирующих и преобразующих значения уникальных идентификаторов. Здесь мы рассмотрим три из них:

  • CoCreateGUID

  • StringFromGUID2

  • CLSIDFromString

Эти функции находятся в библиотеке Ole32.dll.

Функция CoCreateGUID генерирует новое значение GUID в виде двоичной строки длиной 16 байт. Вот её прототип:

HRESULT CoCreateGuid(

GUID *pguid // Указатель на строку с GUID

);

Объявление функции в Visual FoxPro:

DECLARE Long CoCreateGuid IN Ole32.dll String @ guid

Функция возвращает ноль при успешном выполнении либо отличное от нуля значение в случае ошибки. 

Пример использования функции:

lqGUID = REPLICATE(CHR(0), 16))

nReturn = CoCreateGuid(@lqGUID)

Полученное значение может быть использовано как уникальный индекс. Хранить такие индексы можно в полях таблиц типа Character Binary.

Функция StringFromGUID2 преобразует двоичное значение GUID в его символьное представление, которое, например, может выглядеть так: {c200e360-38c5-11ce-ae62-08002b2b79ef}. Вот её прототип:

int StringFromGUID2(

REFGUID rguid, // Двоичное значение GUID

LPOLESTR lpsz, // Указатель на строку с символьным

// значением GUID (в Unicode)

int cchMax // Количество 16-ти битовых символов в строке

);

Объявление этой функции в Visual FoxPro выглядит так:

DECLARE Long StringFromGUID2 IN Ole32.dll String guid,

String @ unicodeGuid, Integer cchMax

Функция возвращает количество символов, включая нулевой завершающий символ, в случае успешного выполнения, и ноль, если произошла ошибка.

Формируемое функцией символьное представление GUID может быть использовано, например, для формирования веток ClsID в реестре Windows. Ниже показан пример кода функции GuidToString, показывающий применение функции StringFromGUID2. Функция получает двоичное значение уникального идентификатора и возвращает его символьное представление. 

FUNCTION GuidToString(tqGuid)

LOCAL unicodeGuid, lnResult

DECLARE Long StringFromGUID2 IN Ole32.dll String, String @, Integer

unicodeGuid = REPLICATE(CHR(0), 80)

lnResult = StringFromGUID2(qGuid, @unicodeGuid, 40)

IF lnResult > 0

RETURN STRCONV(LEFT(unicodeGuid,(lnResult-1)*2,6)

ELSE

RETURN ''

ENDIF

ENDFUNC

Так как функция StringFromGUID2 при работе с символьными строками использует формат Unicode, то применяем функцию STRCONV для конвертирования результата в формат ANSI.

Функция CLSIDFromString преобразует символьное представление уникального идентификатора в двоичную 16-ти байтовую строку. Вот её прототип:

HRESULT CLSIDFromString(

LPOLESTR lpsz, // Указатель на строку с символьным представлением GUID

LPCLSID pclsid // Указатель на строку с двоичным представлением GUID

);

Объявление функции в Visual FoxPro:

DECLARE Long CLSIDFromString IN Ole32.dll String unicodeGuid, String @ qGuid

Функция возвращает ноль при успешном выполнении и отличное от нуля значение в случае ошибки.

Вот пример кода функции StringToGuid, показывающий применение функции CLSIDFromString. Функция получает символьное представление уникального идентификатора и возвращает его двоичное значение:

FUNCTION StringToGuid(tcGuid)

LOCAL lqGUID, lnResult

DECLARE Long StringToGuid IN Ole32.dll String, String @

lqGUID = REPLICATE(CHR(0), 16)

lnResult = StringToGuid(STRCONV(tcGuid,5), @lqGUID)

IF lnResult = 0

RETURN lqGuid

ELSE

RETURN ''

ENDIF

ENDFUNC