Wywołanie metody mając nazwe w stringu

0

Zalozmy, ze mam jakis obiekt oraz tekst w zmiennej. W tym tekscie wyodrebniam pojedyncze linie i odpowiednio je interpretuje. I teraz mam linie, w ktorej jest zapisana nazwa obiektu, oraz metoda jaka ma zostac wykonana (ew. jej argumenty). Wiem jak odczytac metody z argumentami ktore zawiera obiekt poprzez mechanizm RTTI. Ale jak spowodowac wykonanie takiej metody i jak przeslac do niej argumenty?

0

Domyślnie metody w Delphi używają register calling convention. Czyli możliwość przekazania do trzech parametrów poprzez rejestry procesora. Jeżeli chodzi o metody klas to tylko dwóch bo pierwszy jest używany to przekazania wskaźnika na instancję obiektu w kontekscie którego metoda ma być wykonana. Jeżeli chcesz zaimplementować wspomniany mechanizm to chyba bez wstawek asemblerowych i wiedzy na temat Borland register calling convention(Borland fastcall) się nie obędzie.

Niestety nie widzę jakiegoś innego prostego wyjścia z tej sytuacji - moze obiekty COM mógłbyś <ort>wykożystać </ort>- ale ja w tej kwesti nie jestem specjalistą i tylko wydaje mi się że daje to jakieś możliwości. Implementacja protokołu SOAP borlanda możliwe że da ci jakieś pojęcie na temat wywoływania metod klas ale przeglądanie tego kodu nie należy do najprzyjemniejszych rzeczy, poza tym minusem tego jest że klasa musi być zbudowana na interejsach - ale w konsekwencji problem sporowadza się do interfejsów COM - Jeżeli ktoś uważa że wypisuje tu nieprawde to uprzejmie prosze o sprostowanie i nakierowanie WIktorDelphi na właściwy trop.

0

sie da
http://delphi.about.com/cs/adptips2004/a/bltip0204_3.htm

i jeszcze kiedy w inny sposob robilem ale nie pamietam ... trzeba poszukac na pewno jest opisane.

0

Rozwiązanie problemu przedstawione tu: http://delphi.about.com/cs/adptips2004/a/bltip0204_3.htm to jedunie szczególny przypadek gdzie pokazanie jest jak wywołać metody z liczbą argumentów równą zero. Jednak należy tu <ort>zwrucić </ort>uwagę iż umożliwienie wywoływania funkcji klas z kilkoma podstawowymi parametrami powoduje kulkukrotne zwiekszenie nakładów pracy. Obsługa wszystkich możliwych kombinacji jest nieskończona jeżeli nie brać pod uwagę ograniczenie na wielkość stosu :)

Tak więc przedstawiona metoda nie jest na tyle ogólna by dała się zastosować w każdym rozwiązaniu (z resztą możliwe że dla WIktorDelphi jest wystarczająca).

Jednakże jak rozumiem WIktorDelphi chce zaimplementować coś w rodzaju interpretera i mieć możliwość wykonywania dowolnych metod niezależnie od parametrów i do tego by rozwiązanie było skalowalne. Ale takie cechy to tylko mozna osiagnac tylko mając rozwiazanie ogólne przy którym jednak jest potrzebne to co wymieniłem wczesniej:)

Pozdrawiam wszystkich

0

cha to zalezy od nakladu pracy jaki chce temu posiwiecic. Zakladam, ze z gory zna parametry funkcji (wie co trzeba podac a nie chce dowiedziec sie tego znajac tylko nazwe funkcji -> wtedy to istotnie com).
Pare wstawek asemblerowych i juz rozwiazanie gotowe (zakladajac standard wywolania funkcji w delphi). Che che pare to znaczy troche pracy a nie dwa kliki myszka nie mniej sie da. Zawsze mozna zrobic cos wlasnego na ksztalt RTTI ale chyba latwiej dodawac swoj wlasny interfejs (rozwiazan jest sporo jak widac zalezy co to ma byc).

0

Dzieki za odpowiedz.

Tak dj pisze intepreter :) ale zamiast bawic sie w klopotliwe przekazywanie parametrow, napisze cos w rodzaju interfejsu. To pozwoli mi zablokowac niektore metody i wlasciwosci z zewnatrz. Albo zamiast przekazywac parametry, moge najpierw ustalac pewne wlasciwosci a potem wywolywac metode "bezparametrowa" (to chyba najprostrze rozwiazanie, ale troche na okolo).

1 użytkowników online, w tym zalogowanych: 0, gości: 1