Извлечение UDT из коллекций

Раздел посвящен программированию с использованием Power Basic.
ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Извлечение UDT из коллекций

Сообщение ger_kar » 20.03.2012 (Вт) 14:45

http://www.powerbasic.com/support/help/ ... _group.htm
В справке указано как поместить в коллекцию UDT. Согласно этой справке UDT помещается в коллекцию как текстовая строка.
CollObj.Add(Key$$, UDTVar AS STRING)
И действительно если следовать этому примеру, все прекрасно помещается в коллекцию, но возникает закономерный вопрос (у меня точно возник ;) ), а как этот UDT оттудова возвернуть обратно в том же виде?
Код: CollObj.Item(Index) To UDTVar работает без ошибок, но ничего не возвращает. Т.е. в полученной структуре все поля пустые. Так как же возвернуть упрятанные данные?
Бороться и искать, найти и перепрятать

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Re: Извлечение UDT из коллекций

Сообщение Lapex » 20.03.2012 (Вт) 15:17

Исправлено
Код: Выделить всё
Local vUDT As Variant

vUDT = CollObj.Item(Index)
UDTVar = Variant$(Byte, vUDT)

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Извлечение UDT из коллекций

Сообщение ger_kar » 20.03.2012 (Вт) 19:44

Оно конечно все логично, только вот почему-то работать не хочет.
В коллекцию помещает одно, а возвращается мусор. Может дело в размере структуры, у меня она большая 528 байт.
Переменная типа вариант занимает 16 байт, по сути такая структура, как у меня (528 байт) в переменной вариант может сохранить только ссылку на сами данные, может это работает если структура <=16 байт?
Или может нужен массив вариантов?

ЗЫ: Все работает, просто я погнал ;) . PB как оказалось совсем не контролирует индексы в коллекциях, я по привычке (как у массивов) получал элемент с индексом 0, а надо было начинать с 1 ;) . Вот так то!
Бороться и искать, найти и перепрятать

Lapex
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 64
Зарегистрирован: 25.02.2008 (Пн) 14:01

Re: Извлечение UDT из коллекций

Сообщение Lapex » 20.03.2012 (Вт) 20:22

С большой структурой не работал...
Вот рабочий пример для теста:
Код: Выделить всё
#Compile Exe
#Dim All

Type MyStruc
  v1 As Long
  v2 As AsciiZ * 20
End Type

Function PBMain () As Long
  Local myUDT As MyStruc
  Local vUDT  As Variant

  Local List As IPowerCollection
  List = Class "PowerCollection"

  myUDT.v1 = 1
  myUDT.v2 = "Item1"
  List.Add("Key1", myUDT As String)

  myUDT.v1 = 2
  myUDT.v2 = "Item2"
  List.Add("Key2", myUDT As String)

  myUDT.v1 = 3
  myUDT.v2 = "Item3"
  List.Add("Key3", myUDT As String)

  For Each vUDT In List
    myUDT = Variant$(Byte,vUDT)
    ? "myUDT.v1 = " + Str$(myUDT.v1) + ",   myUDT.v2 = " + myUDT.v2
  Next
End Function


P.S. Сорри, не углядел, что ты уже разобрался.


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList