PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » Кажется, я нашёл небольшой косячок в пурике


Кажется, я нашёл небольшой косячок в пурике

Сообщений 1 страница 7 из 7

1

Попробовал вывести в дебаг GUID текущей схемы управления питанием, используя структуру, которая объявлена где-то в либах winapi самого пурика, и вместо нормального GUID получил вот это:
https://forumupload.ru/uploads/0009/ae/28/728/t583335.png

Тогда я попробовал объявить эту структуру сам, по возможности используя беззнаковые типы. В справке winapi указано, что все четыре элемента в структуре должны быть беззнаковыми, но у меня получилось один знаковый и три беззнаковых, потому что unsigned long или его аналогов  в пурике нет. Получил желаемый результат.
https://forumupload.ru/uploads/0009/ae/28/728/t804778.png

Попробовал поменять типы на знаковые и получилась такая же муть, как в первый раз. Получается, что разрабы по ошибке некорректно объявили структуру?  :question:

0

2

Как Guid объявлен и как он выводится на распечать — это разные вещи.

По порядку следования байт числа Guid объявлен:

32‐битное беззнаковое целое;
16‐битное беззнаковое целое;
16‐битное беззнаковое целое (второй раз);
массив длиной восемь из 8‐битных беззнаковых целых.

Выводится же Guid на консоль в «формате реестра»: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} в виде группы из пяти чисел. То есть часть байт из массива интерпретируется уже как отдельное число.

0

3

Ну и вообще вам не нужно задумываться о том какой байт относится к массиву, а какой нет, потому что никто никогда не работает с байтами по отдельности. Просто считайте Guid единым 128‐битным числом, чем он на самом деле и является.

0

4

Вероятно есть ошибка в коде.

0

5

Преобразование GUID в строку с использованием WinApi

Код:
Procedure.s guid2s(*id)
  Protected guid.s = Space(40)
  StringFromGUID2_(*id,@guid,40)
  ProcedureReturn Trim(guid)
EndProcedure

Передаётся указатель на GUID, со структурами можно не возится

Отредактировано Smitis (07.02.2024 16:33:55)

0

6

А ошибка, скорее всего, из-за того, что в Hex был не указан тип.

0

7

Smitis написал(а):

А ошибка, скорее всего, из-за того, что в Hex был не указан тип.

Да, так и есть, я был невнимателен и поспешил. А за пример с StringFromGUID2 большое спасибо :)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » Кажется, я нашёл небольшой косячок в пурике