Форум: "Прочее";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c