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

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

03.04.2015, 07:11. Показов 2968. Ответов 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
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2015, 00:12
Можете описать конкретную задачу, для чего вам это понадобилось?
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
05.04.2015, 13:28  [ТС]
В ObjectInspector(самодельный) передается набор closure геттеров и сеттеров свойств, и не только в него. Местами очень нужно иметь указатель на сам объект а не только на обработчики. ну и как вариант иметь возможность заменить сам объект без перестройки (запроса у объекта списка свойств и перестройки всех контролов), а закешировать редакторы по сигнатурам объектов. Передавать в верх по всей иерархии вызовов еще и указатель на объект не очень хочется, бо как все уже по большому счету отлажено в имеющемся виде и работает. Да и зачем по два раза передавать один и тот же указатель который уже есть в closure?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2015, 13:35
Ну самое банально разбирать указатель closure по 4 байта, например с помощью макросов, так как штатных средств я не встречал. Но блин не факт что с изменениями потом не по отвалится все.
1
 Аватар для Fulcrum_013
2083 / 1574 / 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
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.04.2015, 14:00
Лучший ответ Сообщение было отмечено Fulcrum_013 как решение

Решение

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

Обработчик onClick, не являющийся членом класса формы
0
 Аватар для Fulcrum_013
2083 / 1574 / 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
8484 / 6151 / 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 / 1574 / 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru