Массив указателей

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Массив указателей

Сообщение Игорь Столяров »

Привет всем ! :)

Подскажите пожалуйста, а существует ли в Clarion какой-нибудь способ объявить массив указателей ?
Например, мне нужно передавать на загрузку заранее известное кол-во обезличенных разных очередей.
Т.е. должно быть объявление, что-то вроде:

Код: Выделить всё

HZ_QUEUE_LIST  &QUEUE,DIM(20)
Вроде бы ничего военного, но транслятор сразу говорит, что номер глух по сути и содержанию. :(
Или такие структуры можно создать как-то по другому ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
RaFaeL
✯ Ветеран ✯
Сообщения: 1376
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Благодарил (а): 7 раз
Поблагодарили: 1 раз
Контактная информация:

Массив указателей

Сообщение RaFaeL »

Очередь указателей чем не подходит?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Массив указателей

Сообщение Игорь Столяров »

RaFaeL писал(а): 26 Июль 2019, 7:34Очередь указателей чем не подходит?
Я думал в эту сторону - не очень удобно. Во первых для передачи параметров внутри группы - это снова делать
указатель на типизированную очередь указателей (QUEUE внутри GROUP не может быть).
Во-вторых добавлять записи, считывать записи … :(
Но если современная наука ничего другого не предложит - то видимо придётся делать через QUEUE указателей.
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Массив указателей

Сообщение finsoftrz »

Через массив long и address не подходит?
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Массив указателей

Сообщение Игорь Столяров »

finsoftrz писал(а): 26 Июль 2019, 8:49Через массив long и address не подходит?
Адрес как цифру передать-то конечно можно … но ведь потом хотелось бы к нему применять WHO / WHAT для разбора
структуры QUEUE …
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Массив указателей

Сообщение Дед Пахом »

Для очередей надо использовать не address(), а instance(), правда эта функция появилась только в C8 или даже позже.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Массив указателей

Сообщение finsoftrz »

instance в C6 тоже есть.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Массив указателей

Сообщение Дед Пахом »

finsoftrz писал(а): 26 Июль 2019, 9:48instance в C6 тоже есть.
Действительно есть, не знаю, почему я был уверен, что это новая фича.
С уважением, ДП
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Массив указателей

Сообщение Дед Пахом »

finsoftrz писал(а): 26 Июль 2019, 9:48instance в C6 тоже есть.
Действительно есть, не знаю, почему я был уверен, что это новая фича.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Массив указателей

Сообщение finsoftrz »

Вот так работает в С6.

Код: Выделить всё

form_r  routine
   DATA
lor:queue queue, pre()
lor:str  string(10)
.
lor:queue2 &queue
   CODE

     lor:str='111'
     add(lor:queue)

     lor:queue2 &= instance(lor:queue,2)
     stop(records(lor:queue2))
     stop(who(lor:queue2,1))

     free(lor:queue)


C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4549
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Массив указателей

Сообщение finsoftrz »

Или вот так, для Игоря.

Код: Выделить всё

form_r  routine
   DATA
lor:queue queue, pre()
lor:str  string(10)
.
lor:queue2 &queue
lor:inst   long
   CODE

     lor:str='111'
     add(lor:queue)

     lor:inst = instance(lor:queue,2)
     lor:queue2 &= (lor:inst)

     stop(records(lor:queue2))
     stop(who(lor:queue2,1))

     free(lor:queue)


C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Массив указателей

Сообщение Игорь Столяров »

Спасибо ! Впервые узнал о существовании оператора INSTANCE, если честно … :oops:
Тогда получается, что INSTANCE(QUEUE,THREAD()) позволяет создать массив LONG c адресами QUEUE и задача решена. :)
Пошёл пробовать … ;)
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Массив указателей

Сообщение Yufil »

Я у себя в программе пользую класс DumpClass, цель-сохранить данные сессии ( очереди, группы, простые переменные ) в Blob, а потом через какое-то время восстановить в исходном виде. Не оно ?

Код: Выделить всё

P   Class(DumpClass)
    End

!   Регистрим очереди 
     P.AddField('ZTstQ',TstQ)
     P.AddField('ResQ',ResQ)
     P.AddField('Qlist',QList)

!  Регистрим группу 
     P.AddField('QGroup',QGroup)

 !  Сохраняем сессию 
    P.SaveBlob( Ses:Info )

!  Восстанавливаем сессию, очереди и группы восстанавливают состояние  
   P.LoadBlob( Ses:Info )  
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

Массив указателей

Сообщение vic7tar »

А такой вариант не подойдет?

Код: Выделить всё

grq  Group, dim(20)
q    &Queue.
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7322
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

Массив указателей

Сообщение Игорь Столяров »

vic7tar писал(а): 26 Июль 2019, 16:52А такой вариант не подойдет?
Очень даже подойдёт ! Спасибо !
По сути - этот вариант и самый оптимальный, т.к. сохраняется возможность проверки адреса QUEUE на NULL ...
За теми кто отстал - не возвращаться. (С) Кодекс
Ответить