Se não for published, não dá pra recuperar o nome.

Dá uma pesquisada sobre VMT (Virtual Method Table). O delphi armazena a
quantidade de métodos virtuais e os ponteiros dos respectivos métodos nessa
"tabela", mais o nome do método em si, só se estiver no published.

Na unit JclSysUtils.pas da JVCL tem os métodos:
  function GetVirtualMethodCount(AClass: TClass): Integer;
  function GetVirtualMethod(AClass: TClass; const Index: Integer): Pointer;

Além desses, tem:

type
  PMethodEntry = ^TMethodEntry;
  TMethodEntry = packed record
    EntrySize: Word;
    Address: Pointer;
    Name: ShortString;
  end;

  PMethodTable = ^TMethodTable;
  TMethodTable = packed record
    Count: Word;
    FirstEntry: TMethodEntry;
   {Entries: array [1..65534] of TMethodEntry;}
  end;

function GetMethodTable(AClass: TClass): PMethodTable;
function GetMethodEntry(MethodTable: PMethodTable; Index: Integer):
PMethodEntry;

Mais o PMethodTable, por onde é possível assessar o PMethodEntry.Name, só
retorna os métodos published.

Faça teste e procure sobre VMT(Virtual Method Table)

Em 15 de julho de 2010 17:24, Sérgio T. Uetanabaro
<s...@allbras.com.br>escreveu:

>
>
> Uma coisa que o Marcos disse é verdade. Chamadas de funções dinâmicas
> somente podem ser feitas em métodos PUBLISHED pois somente com esse
> marcador
> o compilador coloca na VMT da classe as informações do método. Soluções via
> RTTI somente com published.
>
> []´s
>
>
> Sergio Uetanabaro
>
> De: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br> [mailto:
> delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>] Em
> nome de eric_developer
> Enviada em: quinta-feira, 15 de julho de 2010 17:13
>
> Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>
> Assunto: Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL
>
>
> Marcos, espero que esteja bem errado e dê para fazer o que preciso.
>
> Sugiro muito cuidado com certas afirmações "NÃO É POSSIVEL ...", mesmo se
> for um expert, assim você automaticamente cria diversos limites a si mesmo.
> Teve situações parecidas onde um colega pediu algo e outro muito experiente
> e talentoso, afirmou o mesmo, e eu postei a solução (código) devidamente
> testada.
>
> Devido a minha experiência, acho mais fácil sempre deduzir que é possível
> mesmo ao que me seja totalmente alheio. Um colega disse ser possível, mas
> não informou como rsrs passou uma tonelada de vídeos para download, vou ver
> se encontro a resposta mágica. Um outro passou o código não posso testar no
> D2009, porque é para Delphi 2010 rsrs
>
> Tedit(sender).setfocus ou semelhante, não é o que desejo, até já criei algo
> parecido e vou substituir.
>
> Grato,
> Eric Developer Systems
>
> --- Em delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br><mailto:
> delphi-br%40yahoogrupos.com.br <delphi-br%2540yahoogrupos.com.br>>
>
> , Marcos Douglas <m...@...> escreveu
> >
> > Olá Eric,
> > Copiei abaixo, duas de suas mensagens:
> > ...
> > Primeiramente sua resposta: NÃO dá pra fazer.
> >
> >....
> > O Delphi possui uma linguagem FORTEMENTE TIPADA. Esse é um "pró" da
> > linguagem, em vários problemas... mas também pode ser um "contra"
> > quando você tenta fazer algoritmos com chamadas "abstratas" e/ou
> > "dinâmicas".
> >
> > A única possibilidade de fazer o que você quer, é utilizando métodos
> > published, que já foi muito comentado por várias pessoas aqui. Não dá
> > pra fazer chamadas a métodos utilizando somente uma string
> > representando seu nome; isso vai contra a filosofia da linguagem,
> > contra a sua base e razão de existir.
> > Você consegue fazer isso em outras linguagens (vc não falou de nenhuma
> > em particular) como, por exemplo, em Java. No entanto, veja que esta
> > prática "quebra" o encapsulamento (um dos pilares da OOP). O mesmo
> > podemos dizer de Ruby, Python, etc...
> >
> > Cordialmente,
> > MD
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    delphi-br-ow...@yahoogrupos.com.br
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    delphi-br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a