Главная страница
    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.46 MB
Время: 0.01 c
1-1138940530
beglec
2006-02-03 07:22
2006.03.05
Как вставить именно анимационную картинку в RichEdit?


2-1140364604
JEK2
2006-02-19 18:56
2006.03.05
Как сделать регистронезависимую выборку в БД


15-1139581564
LordOfRock
2006-02-10 17:26
2006.03.05
Чтение "плохих" дисков.


15-1139491416
splr
2006-02-09 16:23
2006.03.05
Файлы


4-1134719932
Kot_
2005-12-16 10:58
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский