<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jul 17, 2015 at 11:33 AM, Michael Van Canneyt <span dir="ltr"><<a href="mailto:michael@freepascal.org" target="_blank">michael@freepascal.org</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>
<br>
On Fri, 17 Jul 2015, silvioprog wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Hello,<br>
I need to call a method dynamically by its name over string and pass some parameters to it. OK, I don't know if it is possibly in the current version of the compiler, but I'm trying to do something<br>
like this:<br>
<br>
TMethodInvoker.Invoke(VMyObj, ['Param 1', 'Param 2', 1, True]);<br>
<br>
I already get some paramerter informations using this code[1], that prints all parameters and its types using RTTI.<br>
<br>
So I have a question: how can I get the method typedata looking for it in the VMT? Please see this:<br>
<br>
  WriteLn(HexStr(@TMyObject.Test));<br>
  WriteLn(HexStr(TMyObject.MethodAddress('Test')));<br>
<br>
Prints the same address. But:<br>
<br>
  TI := TypeInfo(@TMyObject.Test);<br>
  WriteLn(HexStr(TI));<br>
  TI := TypeInfo(TMyObject.MethodAddress('Test'));<br>
  WriteLn(HexStr(TI));<br>
<br>
Prints different results.<br>
</blockquote>
<br></span>
You cannot get typeinfo like that for methods.<br>
You need to call GetPropInfo() from the typeinfo unit for published properties/methods.</blockquote><div><br></div><div>=/</div><div><br></div><div>Yes, I'm just trying to avoiding an additional declaration of my procs, calling my methods using something like "published MyMethod(AParams: array of ...)" instead of calling events like "type TMyProc = procedure(AParams: array of ...) of object ...... published OnMyProc: TMyProc" etc.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
How System.TypeInfo retrieve the typeinfo from my @TMyObject.Test address? It is done by the method address so?<br>
</blockquote>
<br></span>
No.</blockquote><div><br></div><div>=(</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
I took a look at the TRTTIWriter class and also in the VMT, but I don't know how the compiler handles this informations internally, so sorry it this question sounds nonsense. =P<br>
</blockquote>
<br></span>
You can check the reader class in classes unit.</blockquote></div><div><br></div><div>I'll do it again, thank you. =)</div><div><br></div>-- <br><div>Silvio Clécio<br>My public projects - <a href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a></div>
</div></div>