Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Функции для работы с 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

Date: 2015-07-27; view: 1232; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию