Страница 1 из 3

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

Добавлено: 25 Декабрь 2017, 18:20
Игорь Столяров
Привет всем ! :)

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

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

  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 ....
Т.е. передаваемый в процедуру по адресу класс не является указателем на класс ?!
Что-то я окончательно запутался. :( А как тогда передать в процедуру именно указатель на класс ?

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

Добавлено: 25 Декабрь 2017, 18:52
Дед Пахом
Да всё нормально, это просто DISPOSE неверно вызывается, надо в неё явную ссылку (&refObject) на объект передать.

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

Добавлено: 25 Декабрь 2017, 18:54
finsoftrz
Нас Мялин научил давно... Пишу на память, проверьте. В общем, передаете adress(myclass) как long. А в целевой процедуре для типизированной ссылки &myclass делаете присвоение myclass &= (long параметр). Скобки обязательны. А дальше рулите классом, как обычно. Это очень клевая схема...

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

Добавлено: 25 Декабрь 2017, 19:01
finsoftrz
Таким способом можно передавать ссылку на класс и в другой поток...

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

Добавлено: 25 Декабрь 2017, 19:59
Игорь Столяров
finsoftrz писал(а): 25 Декабрь 2017, 18:54передаете adress(myclass) как long
Спасибо ! Работает ... но как-то боязно, если честно, вот так вот, адреса класса напрямую гонять через long. :(

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

Добавлено: 25 Декабрь 2017, 20:26
finsoftrz
Да все нормально. Я давно пользуюсь. Главная тонкость в использовании скобок при присвоении переданного адреса. Даже не знаю, где Мялин это подсмотрел. Особенно удобно рулить через переданный адрес класса из другого потока. То есть устанавливаем свойства и шлем в нужный поток пользовательское сообщение, которое вызывает ответное действие. Получаем общие переменные для двух потоков без использования глобальных структур.

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

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

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

(Feq){PROP:SomeProperty} = XXX

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

Добавлено: 26 Декабрь 2017, 9:22
Yufil
1. Наверное, речь не о классе, а об объекте класса, немного дезориентирует.
2. Достать объект из другого треда легко, используя встроенную функцию Instance.
3. Надо внимательно читать Clarion Magazine, там много всего. Когда мне нужно было динамически подключать DLL и вызвать функцию по адресу с передачей параметров, известный по адресу, решение отыскал. Лет 10 назад составлял дайджест, потом бросил...

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

Добавлено: 26 Декабрь 2017, 10:49
finsoftrz
Еще в архивах clalist куча всего обсуждалось. Львиная часть вопросов, которые сейчас здесь или в clalist задают. Бывает, увидишь очередной вопрос, и пропускаешь с мыслью "ребята, ну сколько же можно"...

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

Добавлено: 26 Декабрь 2017, 12:07
Admin
finsoftrz писал(а): 26 Декабрь 2017, 10:49ну сколько же можно
Память не бездонная. + иногда и не помнишь что искать :)

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

Добавлено: 26 Декабрь 2017, 12:19
Игорь Столяров
finsoftrz писал(а): 26 Декабрь 2017, 10:49ну сколько же можно
Да потому, что нет нормального описания, руководства или книги по Clarion ... :(
Времена Мялина и ожесточённых обсуждений в Clalist - в прошлом.
Хорошо, что ещё есть те, кто это всё помнит и является живым носителем знаний по языку Clarion.

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

Добавлено: 26 Декабрь 2017, 13:48
Yufil
А смысл? Кларион помер окончательно или близок к этому, невзирая на все достоинства. И главный вопрос - как дожить до пенсии с очень даже глубокими познаниями в Кларионе...

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

Добавлено: 26 Декабрь 2017, 14:07
finsoftrz
Да ладно, откуда столько пессимизма? Я, наоборот, замечаю рост интереса к нашим системам. Очень у многих парк компьютеров, на которых "современное" монструозное ПО просто не работает. И знаний фундаментальных все больше дефицит...

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

Добавлено: 26 Декабрь 2017, 14:12
Yufil
Хмм. Я сейчас примерно пополам пишу на python и javascript. Это после >20 лет на Clarion...

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

Добавлено: 26 Декабрь 2017, 14:37
finsoftrz
Тут речь о готовых продуктах. У меня на кларионе функционально сложная система, которую непросто воспроизвести. По крайней мере, очень дорого. Когда-то прикидывал стоимость разработки по потраченному времени, за 10 млн зашкалило, больше не считал. Если речь про новые разработки и, тем более, если это наемная работа, то тут и без того с каждым годом сложнее. И здоровья меньше, и мотивации. Делать то, что нужно не тебе, а другим, морально очень тяжело. Даже за деньги, если количество нулей меньше 5... :-)