Как передать в процедуру указатель ?

Clarion, Clarion 7

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

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

Как передать в процедуру указатель ?

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

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

Имею желание передать в процедуру указатель на класс для работы с ним, но не имею возможности это сделать. :(
Т.е. хочется, что-то вроде:

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

  Map
    TheSetup(xlsxwriter)  ! TheSetup(*xlsxwriter)
  end  

xlsxwriter   CLASS, TYPE
  ...
end

Loc:MyXLSX  &xlsxwriter

   Code 
   Loc:MyXLSX &= NEW(xlsxwriter)
   If ~(Loc:MyXLSX &= NULL) then TheSetup(Loc:MyXLSX).
.....

TheSetup Procedure(xMyXLSX)
  Code
  Dispose(xMyXLSX)   ! ERROR: Must be reference ....
Т.е. передаваемый в процедуру по адресу класс не является указателем на класс ?!
Что-то я окончательно запутался. :( А как тогда передать в процедуру именно указатель на класс ?
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Как передать в процедуру указатель ?

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

Да всё нормально, это просто DISPOSE неверно вызывается, надо в неё явную ссылку (&refObject) на объект передать.
С уважением, ДП
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как передать в процедуру указатель ?

Сообщение finsoftrz »

Нас Мялин научил давно... Пишу на память, проверьте. В общем, передаете adress(myclass) как long. А в целевой процедуре для типизированной ссылки &myclass делаете присвоение myclass &= (long параметр). Скобки обязательны. А дальше рулите классом, как обычно. Это очень клевая схема...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как передать в процедуру указатель ?

Сообщение finsoftrz »

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

Как передать в процедуру указатель ?

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

finsoftrz писал(а): 25 Декабрь 2017, 18:54передаете adress(myclass) как long
Спасибо ! Работает ... но как-то боязно, если честно, вот так вот, адреса класса напрямую гонять через long. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как передать в процедуру указатель ?

Сообщение finsoftrz »

Да все нормально. Я давно пользуюсь. Главная тонкость в использовании скобок при присвоении переданного адреса. Даже не знаю, где Мялин это подсмотрел. Особенно удобно рулить через переданный адрес класса из другого потока. То есть устанавливаем свойства и шлем в нужный поток пользовательское сообщение, которое вызывает ответное действие. Получаем общие переменные для двух потоков без использования глобальных структур.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как передать в процедуру указатель ?

Сообщение Admin »

finsoftrz писал(а): 25 Декабрь 2017, 20:26Даже не знаю, где Мялин это подсмотрел
В стандартных классах такое видел и сам использовал для

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

(Feq){PROP:SomeProperty} = XXX
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Как передать в процедуру указатель ?

Сообщение Yufil »

1. Наверное, речь не о классе, а об объекте класса, немного дезориентирует.
2. Достать объект из другого треда легко, используя встроенную функцию Instance.
3. Надо внимательно читать Clarion Magazine, там много всего. Когда мне нужно было динамически подключать DLL и вызвать функцию по адресу с передачей параметров, известный по адресу, решение отыскал. Лет 10 назад составлял дайджест, потом бросил...
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как передать в процедуру указатель ?

Сообщение finsoftrz »

Еще в архивах clalist куча всего обсуждалось. Львиная часть вопросов, которые сейчас здесь или в clalist задают. Бывает, увидишь очередной вопрос, и пропускаешь с мыслью "ребята, ну сколько же можно"...
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Как передать в процедуру указатель ?

Сообщение Admin »

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

Как передать в процедуру указатель ?

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

finsoftrz писал(а): 26 Декабрь 2017, 10:49ну сколько же можно
Да потому, что нет нормального описания, руководства или книги по Clarion ... :(
Времена Мялина и ожесточённых обсуждений в Clalist - в прошлом.
Хорошо, что ещё есть те, кто это всё помнит и является живым носителем знаний по языку Clarion.
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Как передать в процедуру указатель ?

Сообщение Yufil »

А смысл? Кларион помер окончательно или близок к этому, невзирая на все достоинства. И главный вопрос - как дожить до пенсии с очень даже глубокими познаниями в Кларионе...
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как передать в процедуру указатель ?

Сообщение finsoftrz »

Да ладно, откуда столько пессимизма? Я, наоборот, замечаю рост интереса к нашим системам. Очень у многих парк компьютеров, на которых "современное" монструозное ПО просто не работает. И знаний фундаментальных все больше дефицит...
C6/C11, ШВС, tps/btrieve.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Как передать в процедуру указатель ?

Сообщение Yufil »

Хмм. Я сейчас примерно пополам пишу на python и javascript. Это после >20 лет на Clarion...
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4550
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

Как передать в процедуру указатель ?

Сообщение finsoftrz »

Тут речь о готовых продуктах. У меня на кларионе функционально сложная система, которую непросто воспроизвести. По крайней мере, очень дорого. Когда-то прикидывал стоимость разработки по потраченному времени, за 10 млн зашкалило, больше не считал. Если речь про новые разработки и, тем более, если это наемная работа, то тут и без того с каждым годом сложнее. И здоровья меньше, и мотивации. Делать то, что нужно не тебе, а другим, морально очень тяжело. Даже за деньги, если количество нулей меньше 5... :-)
Последний раз редактировалось finsoftrz 26 Декабрь 2017, 15:22, всего редактировалось 1 раз.
C6/C11, ШВС, tps/btrieve.
Ответить