Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614

Работа с __closure штатными средствами

03.04.2015, 07:11. Показов 3000. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите плиз есть ли штатные средства обработки __closure?
т.е. штатные процедуры макросы позволяющие разложить __closure на два указателя, и собрать два указателя в __closure?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2015, 07:11
Ответы с готовыми решениями:

Объединение данных в формате ASN.1 штатными средствами
Добрый день. Возникла у меня такая задача: на входе строка с данными об издателе сертификата. Нужно получить массив байт в формате ASN.1....

Как ограничить антивирус штатными средствами Window 7 ?
Как ограничить антивирус штатными средствами Window 7 ? Ну или какими нибудь дополнительными средствами. Антивирус требует выполнения...

Архивирование Windows штатными средствами в сервер на Ubuntu
Здравствуйте. Есть компьютер под управлением Windows 8.1 и есть сервер под управлением Ubuntu 13.10. Задача - штатными средствами...

8
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2015, 00:12
Можете описать конкретную задачу, для чего вам это понадобилось?
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
05.04.2015, 13:28  [ТС]
В ObjectInspector(самодельный) передается набор closure геттеров и сеттеров свойств, и не только в него. Местами очень нужно иметь указатель на сам объект а не только на обработчики. ну и как вариант иметь возможность заменить сам объект без перестройки (запроса у объекта списка свойств и перестройки всех контролов), а закешировать редакторы по сигнатурам объектов. Передавать в верх по всей иерархии вызовов еще и указатель на объект не очень хочется, бо как все уже по большому счету отлажено в имеющемся виде и работает. Да и зачем по два раза передавать один и тот же указатель который уже есть в closure?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2015, 13:35
Ну самое банально разбирать указатель closure по 4 байта, например с помощью макросов, так как штатных средств я не встречал. Но блин не факт что с изменениями потом не по отвалится все.
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
05.04.2015, 13:54  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну самое банально разбирать указатель closure по 4 байта, например с помощью макросов, так как штатных средств я не встречал. Но блин не факт что с изменениями потом не по отвалится все.
Ну банальный велосипед естественно понятен. Даже с костылем на случай если по 8 байт а не по 4. Вопрос именно в штатных средствах. не TColor все таки который макросами в хвост и гриву перепиливается постоянно (обычно в Vector3D и обратно)

Добавлено через 8 минут
гы... кажись въехал в полуштатный костыль:
C++
1
2
3
4
5
6
7
union{
    struct{
          void* Object;
          void* Proc;
    }
    TNotifyEvent closureptr;
 }
должно работать , тока типы придется приводить ручками. И не отвалится по идее пока что то вообще конкретно не поменяется, например порядок указателей на объект и на метода. Штатные макросы кстати краем глаза недавно в хелпе видел, но тогда просто не их искал, а какой раздел и имена самих макросов не запомнил. По поисковым запросом в хелп ноль на массу. Вот и вопрашаю может кто стандартные средства юзает и потому помнит как они называются.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2015, 14:00
Лучший ответ Сообщение было отмечено Fulcrum_013 как решение

Решение

Есть такая штука System.TMethod

Обработчик onClick, не являющийся членом класса формы
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
05.04.2015, 14:34  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Есть такая штука System.TMethod
та не там макрос был что то типа mkclosurepointer и тому подобное. И с этими свойствами не сработает бо как оно вообще не от TObject порождено, published то же не юзает хотя дописать в предки TObject и проперти перенести в published тоже не проблема.
Цитата Сообщение от Avazart Посмотреть сообщение
Обработчик onClick, не являющийся членом класса формы
Ну тут как раз немного наоборот
пример одного из классов-хранилищ свойств
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class TScalarParameter:public TParameter{
private:
      TScalarGetter FGet;
      TScalarSetter FSet;
protected:
       virtual TParamType __fastcall GetType(){return ptScalar;};
       scalar __fastcall GetValue(){return FGet();};
       void __fastcall SetValue(scalar Value){ FSet(Value);};
public:
      __fastcall TScalarParameter(AnsiString aName,TScalarSetter Setter, TScalarGetter Getter):TParameter(aName){
             FSet=Setter;
             FGet=Getter;
      };
      __property TScalarGetter Get={read=FGet};
      __property TScalarSetter Set={read=FSet};
      __property scalar Value={read=GetValue,write=SetValue};
};
Необходимо реализовать замену указателя на объект в уже установленных FGet и FSet не трогая сами указатели на методы.
А вот здесь для примеру нужон еще и указатель на сами объекты чьими параметрами пользуются, для дополнительных проверок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class TLinearDimension{
      scalar FDelta;
      scalar FAxe;
      TScalarParameter* Position1,*Position2;
      void __fastcall TLinearDimension(TAxe Axe,TVectorParameter* aPosition1,TVectorParameter* aPosition2){
           Position1=aPosition1->Axes[Axe];
           Position2=aPosition2->Axes[Axe];
      }
      void __fastcall Verify(){
           if (abs(Position1->Value-Position2->Value)!=FDelta)
               Position2->Value=Position1->Value+FDelta;
      };
      void __fastcall SetDelta(scalar Value){
           if(Value<0) Value=0;
           FDelta=Value;
           Verify();
      }
      bool __fastcall PositionInterceipt(TVector &Position ){
          // Position.D.[Axe]=Origin->Position.D[Axe]+Delta;
          return true;
      }
 
      bool __fastcall LengthInterceipt(scalar &Position){Position=FDelta; return true;}
};
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2015, 15:08
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
TObject порождено
При чем тут TObject ?

Добавлено через 6 минут
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Необходимо реализовать замену указателя на объект в уже установленных FGet и FSet не трогая сами указатели на методы.
Очевидно что это не нормально, оба указателя должны задаваться вместе иначе можно получить рассогласование.
Так делать можно только есть механизм жесткой проверки сигнатур методов.
0
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
05.04.2015, 15:20  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
При чем тут TObject ?
Сорьки, просто копая предварительно (перед реализацией самоделки) хелп по RTTI уже в голову гвоздем засело что все что касается рефлекшина должно быть порождено от TObject и сидеть в published.
Цитата Сообщение от Avazart Посмотреть сообщение
Очевидно что это не нормально, оба указателя должны задаваться вместе иначе можно получить рассогласование.
Так делать можно только есть механизм жесткой проверки сигнатур методов.
Проверять по большому счету нужно не сигнатуру методов, а класса объекта. т.е. если исходный объект был класса TLine к примеру то устанавливать новый объект можно только TLine. такую проверку сделать просто. Гораздо сложнее устроить проверку общего предка от которого порождены проперти. Хотя такой ситуации пока что не предвидится. Имеется полный набор классов определяющих все возможные объекты из существующей предметной области. Пока что напрашивается переделка в параметрическое представление объектов предметной области а не расширение иерархии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2015, 15:20
Помогаю со студенческими работами здесь

Как загрузить ОЗУ штатными средствами Windows?
Для лабораторной работы необходимо съэмитировать полную загрузку ОЗУ и подключение файла подкачки при различном объёме ОЗУ. Какими...

Можно ли штатными средствами С++ замерять количество тиков процессора?
Хочу узнать, сколько тактов процессора прошло с начала запуска приложения. Возможно? В WinApi для этих целей есть...

Ошибка при восстановлении системы штатными средствами Windows
Произошла неопознанная ошибка при восстановлении системы: Сигнатура проблемы Имя проблемного события: SystemRestore Версия: 6.0.6002 ...

Какими штатными средствами можно сделать резевное копирование компа?
нужно выполнить обновление компьютера sp1 на sp2, хотелось бы сделать резервное копирование компьютера перед обновлением и не могу решиься...

Как загрузить номенклатуру из внешнего файла (Excel и др.) в 1С 8.3 штатными средствами?
Коллеги приветствую! Подавляющее большинство не знает, что разработчики оставили лазейку - возможность загрузить справочники в базу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru