Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.47 MB
Время: 0.01 c
8-1127291626
Виталька2005
2005-09-21 12:33
2006.03.05
Наложение изображений


2-1139928231
Ice
2006-02-14 17:43
2006.03.05
Повернуть текст на Canvas е на 90 градусов...


2-1139812409
Irinka
2006-02-13 09:33
2006.03.05
Простой FTP - клиент


2-1137598739
2Wish
2006-01-18 18:38
2006.03.05
Abstract Error


8-1127217771
tomek
2005-09-20 16:02
2006.03.05
Странная ошибка при работе с контекстом и таймером





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский