Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
16 / 16 / 1
Регистрация: 29.11.2014
Сообщений: 227
1

RTTI, не могу прочитать атрибуты

25.01.2018, 18:10. Показов 794. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, вот элементарнейшую задачу делаю, а уперся в неизвестную ошибку или глюк.
Пытаюсь просто прочитать атрибуты.
По моему скромному представлению, я должен получить мои атрибуты в memo... А получаю AV
RTTI, не могу прочитать атрибуты


Код...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
unit uMain;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,
  System.Rtti;
 
type
  TAttribute = class(TCustomAttribute)
  private
    FName: string;
    FAge: integer;
    constructor Create(AName: string; AAge: integer);
    procedure SetAge(const Value: integer);
    procedure SetName(const Value: string);
  published
    property Name: string read FName write SetName;
    property Age: integer read FAge write SetAge;
  end;
//
 
//  {$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
  TSomeClass = class
  public
    [TAttribute('SomeName', 39)]
    procedure someProcedure(const s: string);
    [TAttribute('AnotherName', 37)]
    procedure anotherProcedure(const s: string);
  end;
 
  TMain = class(TForm)
    bStart: TBitBtn;
    Memo: TMemo;
    procedure bStartClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Main: TMain;
 
implementation
 
{$R *.dfm}
 
{ TMyAttribute }
 
constructor TAttribute.Create(AName: string; AAge: integer);
begin
  FName := AName;
  FAge := AAge;
end;
 
procedure TAttribute.SetAge(const Value: integer);
begin
  FAge := Value;
end;
 
procedure TAttribute.SetName(const Value: string);
begin
  FName := Value;
end;
 
{ TSomeClass }
 
procedure TSomeClass.anotherProcedure(const s: string);
begin
//
end;
 
procedure TSomeClass.someProcedure(const s: string);
begin
  //
end;
 
procedure TMain.bStartClick(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  m: TRttiMethod;
  a: TCustomAttribute;
begin
  Memo.Lines.Clear;
  ctx := TRttiContext.Create;
  try
    t := ctx.GetType(TSomeClass);
    for m in t.GetMethods do
    begin
      for a in m.GetAttributes do // << AV вылетает здесь
      begin
        if a is TAttribute then
        begin
          Memo.Lines.Add(m.Name);
         // Memo.Lines.Add(Format('Method = %s; Attribute = %s, Name = %s, Age = %d', [m.Name, a.ClassName, TMyAttribute(a).Name, TMyAttribute(a).Age]));
//          Memo.Lines.Add(m.Name, a.ClassName);
        end;
      end;
    end;
  finally
    ctx.Free;
  end;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.01.2018, 18:10
Ответы с готовыми решениями:

вместо механизма RTTI языка C++ используйте свою собственную модель RTTI
В примере вместо механизма RTTI языка C++ используйте свою собственную модель RTTI. Включите в...

Как прочитать атрибуты тегов в xml
Здравствуйте. Как прочитать значения атрибутов kod, isgroup, ostatok и др. &lt;?xml version=&quot;1.0&quot;...

Как прочитать атрибуты узла в XML?
Подскажите пожалуйста, как правильно прочитать атрибуты узла? XmlDocument doc = new...

Атрибуты класса и атрибуты объекта
в чем разница атрибута класса и атрибута объекта? препод задал вопрос : &quot;функция доступа set()...

1
16 / 16 / 1
Регистрация: 29.11.2014
Сообщений: 227
26.01.2018, 09:20  [ТС] 2
Вот она, запойная разработка. Сдал проект, решил для себя помучить RTTI атрибуты и прописал конструктор в private))
Утром проснулся и понял, что нельзя так много работать)))
0
26.01.2018, 09:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2018, 09:20
Помогаю со студенческими работами здесь

Не могу прочитать сообщение
Всем доброго дня! Если пишу не в тему, прошу прощения. Проблема в том, не могу от некоторых...

Не могу прочитать файл
Есть код(листинг 1) Content content = referenceService.getContentById(9); ...

Не могу прочитать настройки
Привет! В свойствах проекта, на вкладке Параметры добавил несколько настроек. Но при попытке...

Не могу прочитать код
Помогите пожалуйста прочитать код.Пробывал через echo понять работу скрипта.Но ничего не вышло.Код...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru