Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

RTTI для public методов? Это возможно ;-)   Найти похожие ветки 

 
jack128 ©   (2006-02-09 14:20) [0]

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ObjComAuto;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

type
{$METHODINFO ON} // ключевой момент
 TTest = class(TObject)
 public
   procedure Test;
 end;
{$METHODINFO OFF}

{ TTest }

procedure TTest.Test;
begin
 ShowMessage("Test");
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 V: Variant;
begin
 V :=  TObjectDispatch.Create(TTest.Create) as IDispatch;
 V.Test;
end;


 
vecna ©   (2006-02-09 14:26) [1]

че-та не нашел я в хепле такой буквы.
это документированная возможность? в каких версиях?


 
jack128 ©   (2006-02-09 14:32) [2]

vecna ©   (09.02.06 14:26) [1]
У мя семерка.  В хелпе этой директивы я не нашел.

vecna ©   (09.02.06 14:26) [1]
это документированная возможность?

Весь модуль TypInfo - недокументирован, а уж об этой фиче в доках 100 пудов ничего нету..


 
MBo ©   (2006-02-09 14:43) [3]

$METHODINFO directive (Delphi)
Type
Switch

Syntax
{$METHODINFO ON} or {$METHODINFO OFF}

Default
{$METHODINFO OFF}

Scope
Local


The $METHODINFO switch directive is only effective when runtime type information (RTTI) has been turned on with the {$TYPEINFO ON} switch. In the {$TYPEINFO ON} state, the $METHODINFO directive controls the generation of more detailed method descriptors in the RTTI for methods in an interface. Though {$TYPEINFO ON} will cause some RTTI to be generated for published methods, the level of information is limited. The $METHODINFO directive generates much more detailed (and much larger) RTTI for methods, which describes how the parameters of the method should be passed on the stack and/or in registers.

There is seldom, if ever, any need for an application to directly use the $METHODINFO compiler switch. The method information adds considerable size to the executable file, and is not recommended for general use.
Note:
The Delphi compiler"s Win32 web service support code uses method information descriptors in order to pass parameters received in a network packet to the target method. {$METHODINFO ON} is used only for web service interface types.


 
MBo ©   (2006-02-09 14:43) [4]

это из 2006 хелпа


 
jack128 ©   (2006-02-09 14:51) [5]

MBo ©   (09.02.06 14:43) [4]
это из 2006 хелпа


Гм. Если реальное поведение в десятке, такое как описано в хелпе, то борланд сильно забил на обратную совместимость.

type
{$TYPEINFO OFF} // сравни с The $METHODINFO switch directive is only effective when runtime type information (RTTI) has been turned on with the {$TYPEINFO ON} switch
{$METHODINFO ON}
TTest = class(TObject)
public // сравни с Though {$TYPEINFO ON} will cause some RTTI to be generated for published methods, the level of information is limited. The $METHODINFO directive generates much more detailed (and much larger) RTTI for methods
  procedure Test;
end;
{$METHODINFO OFF}
{$TYPEINFO ON}

{ TTest }

procedure TTest.Test;
begin
ShowMessage("Test");
end;

procedure TForm1.Button1Click(Sender: TObject);
var
V: Variant;
begin
V := TObjectDispatch.Create(TTest.Create) as IDispatch;
V.Test;
end;


 
Игорь Шевченко ©   (2006-02-09 15:23) [6]


> Гм. Если реальное поведение в десятке, такое как описано
> в хелпе, то борланд сильно забил на обратную совместимость.
>


А я вообще не понимаю, нафиг это надо. Тогда уж .Net с Reflection, чем подобные извращения.


 
jack128 ©   (2006-02-09 16:00) [7]

Игорь Шевченко ©   (09.02.06 15:23) [6]
А я вообще не понимаю, нафиг это надо.

Ну видимо, чтобы не морочится с реализацией IDispatch
Игорь Шевченко ©   (09.02.06 15:23) [6]
Тогда уж .Net с Reflection, чем подобные извращения.

Правельно. Вообще всё RTTI - в топку. Для этого есть .NET с Reflection ;)


 
vuk ©   (2006-02-09 16:04) [8]

to jack128 ©   (09.02.06 16:00) [7]:
>Ну видимо, чтобы не морочится с реализацией IDispatch
Еще секция automated, помнится для этого была...


 
Игорь Шевченко ©   (2006-02-09 16:41) [9]

jack128 ©   (09.02.06 16:00) [7]


> Правельно. Вообще всё RTTI - в топку. Для этого есть .NET
> с Reflection


Нет, RTTI появился до .Net и относился к вполне определенному типу свойств, а именно published, зачем, думаю, рассказывать не надо.

Но смысл расширять его область в то время, когда появился .Net, я не вижу.

ЗЫ: Правильно



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
2-1140011423
Ice
2006-02-15 16:50
2006.03.05
Виртуальный TCanvas и его фоновый цвет...


15-1139508569
ZeFiR
2006-02-09 21:09
2006.03.05
Замена системного файла


1-1138875687
OlegNik
2006-02-02 13:21
2006.03.05
Как программно работать с реестром?


15-1139390738
StriderMan
2006-02-08 12:25
2006.03.05
Не работает Break On Exception


15-1139642716
Ega23
2006-02-11 10:25
2006.03.05
С Днём рождения! 11 февраля