Skocz do zawartości

Wywoływanie procedury


Maciek_

Polecane posty

Witam wszystkich serdecznie.

 

Zgłaszam sie do wszystkich z następującym problemem. Potrzebuje zapisać adres procedury do wskaźnika i napisać wstawke assemblerową która będzie tą wstawke wywoływała. Pamiętem, że już kiedyś coś takiego napisałem, ale teraz nie pamiętam jak to się robiło a moje metody prób i błędów nie przyniosły skótków. O ile sie nie mylą adres procedury ładowałem za pomocą les a wywoływałem za pomocą call. Dobrze myślę? Ale jak dokładnie coś takiego napisać?

 

Załóżmy, że mamy znaną wszystkiem procedure:

 

procedure HelloWorld;

begin

Writeln('Hello World!');

end;

 

i wskaźnik p:pointer;

 

jak załadować adres tej procedury do wskaźnika i jak ją wywołać?

Link do komentarza
Udostępnij na innych stronach

type
  TEvent = procedure of Object;
var
 E: TEvent;

proYH[Y[][    N[ NŚVćCŚ&VvSŁVĆĆv&ĆCSwvĆćPŚVćByŚJ'hŚXi+h'&f:n-óćmreĄj+m^VŁ{hmmŁ3ĘdŁ~;(ui'
type
 TEvent = procedure of Object;
 TForm1 = class(TFormB]N]YHPX]J[V7B&6VGW&R'WGF6Ć66VćFW#D&ŚV7B&fFP!ąą]ą(AŃąŃ(ic
   { Public declarations }
 end;

var
 Form1: TForm1;
N][[[Y[][
_BYHÓVĆĆv&ĆCŚ&Vv&VWŚVćC&6VGW&RDf&Óf&7&VĄMQ=)(!ąą]ą)()Form1.Button1Click(Sender: TObject);
begin
 E;
end;

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Hihi udało sie;

 

nie wiedziałem że to takie proste;

 

dla zainteresowanych wklejam program testowy takiej operacji w Borland Turbo Pascalu:

 

 

 

Program test;

 

uses crt;

 

procedure Hello;

begin

writeln('Hello!');

readkey;

end;

 

var Hi : pointer;

 

Begin

 

Hi := @Hello;

asm

call Hi

end;

End.

Link do komentarza
Udostępnij na innych stronach

Witam.

borykam sie niestety jeszcze z tym problemem, bo nie do końca chodzi tak jak powinno. Wprawdzie ten Programik HELLO co napisałem pare postów temu działa bez zarzutu, ale niestety jak stosuje podobną sztuczke przy obiektach to mi sie probram wywala. tzn mam pewien obiekt, którego jednym z parametrów jest zmienna typu pointer, dajmy na to:

moj_obiekt = obiect
                    p:pointer;
      YH
[NVćCŚ&VBFW7BFW\")))OR3hhw+^2ł&ŚiqnŻ)-yćn'ĄŚz6zŹqP))ą)(

to mi wywala program.

 

za wszeklą pomoc dziękuję z góry

 

PS. Nie wystarczy napisać 'p' bo to jest TURBO PASCAL!

Link do komentarza
Udostępnij na innych stronach

zwykłą procedurka


procedure Hello;
Begin
writeln('Hello');
End;

typH[YZHYX[&6VGW&RFW7BFW\"Ń((     end;

moj_obiekt.test(pp:pointer);
begin
p:=pp;
end;

mYZY[b[[[QR&VC&Vv$TBFW7BVĆĆ$TB7F'CVćC

 

Uruchamiam coś w podobie i jeb.

sprawdzałem, czy to nie wina wyywoływanej procedury (bo to może w niej być jakiś błąd) ale nawet jak jest pusta to sie programik sypie.

Link do komentarza
Udostępnij na innych stronach

PS. Nie wystarczy napisać 'p' bo to jest TURBO PASCAL!

A może:

to jest SPAAARTAAAAA!!!!!!!

? ;-)

 

Napisz dokładnie co chcesz uzyskać, pomyśli się. Używanie wstawek asm nie ma tutaj najmniejszego sensu. Powinieneś ogólnie użyć typów proceduralnych, a nie wskaźników do procedur.

҉

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...