Maciek_ Napisano Wrzesień 1, 2007 Zgłoś Share Napisano Wrzesień 1, 2007 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 More sharing options...
Max1414 Napisano Wrzesień 1, 2007 Zgłoś Share Napisano Wrzesień 1, 2007 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 More sharing options...
Maciek_ Napisano Wrzesień 1, 2007 Autor Zgłoś Share Napisano Wrzesień 1, 2007 ok, zapomniałem dodać. Interesuje mnie tylko i wyłącznie Borland Pascal. Delphi odpada ale dzięki za pomoc i fatyge Link do komentarza Udostępnij na innych stronach More sharing options...
Force Napisano Wrzesień 1, 2007 Zgłoś Share Napisano Wrzesień 1, 2007 To nie może być: TEvent = procedure; a potem jak Max1414? Baza tysięcy lotnisk: http://airportsbase.com Link do komentarza Udostępnij na innych stronach More sharing options...
Maciek_ Napisano Wrzesień 1, 2007 Autor Zgłoś Share Napisano Wrzesień 1, 2007 tzn jak, bo szczerze mówiąc to mi to nie wiele mówi Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Wrzesień 1, 2007 Zgłoś Share Napisano Wrzesień 1, 2007 tzn jak, bo szczerze mówiąc to mi to nie wiele mówi zmień w pierwszym przykładzie co ci podałem TEvent na TEvent = procedure; i zobacz czy działa Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Maciek_ Napisano Wrzesień 1, 2007 Autor Zgłoś Share Napisano Wrzesień 1, 2007 niestety pokazuje invalid procedure or function reference Link do komentarza Udostępnij na innych stronach More sharing options...
Iskar Napisano Wrzesień 1, 2007 Zgłoś Share Napisano Wrzesień 1, 2007 type TProc = procedure; procedure procka; begin ShowMesYJ NNĘN[YHLK]XĘ[W#D&ŚV7Bf\"E&3Ś&VvŁ&6ś6ą() Edit: jednak zrobiłem : p Poza tym powinieneś przejrzeć helpa bo tam jest wszystko o wskaźnikach na funkcje/procki. Link do komentarza Udostępnij na innych stronach More sharing options...
Maciek_ Napisano Wrzesień 1, 2007 Autor Zgłoś Share Napisano Wrzesień 1, 2007 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 More sharing options...
Brainer Napisano Wrzesień 1, 2007 Zgłoś Share Napisano Wrzesień 1, 2007 Hehe, ten post nic nie wniesie, ale na przyszłość używaj tagów. Mianowicie "[pascal][/pascal]". .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Wrzesień 2, 2007 Zgłoś Share Napisano Wrzesień 2, 2007 A nie powinienes jeszcze polozyc na stos rejestrow? www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Wrzesień 2, 2007 Zgłoś Share Napisano Wrzesień 2, 2007 Po kiego używać tu wstawki asm jak wystarczy napisać samo 'p' dla wywołania procedury ? Blind: A po co? Tu nie ma żadnych parametrów. ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Wrzesień 2, 2007 Zgłoś Share Napisano Wrzesień 2, 2007 no ale jak by rejestry byly zmieniane wewnatrz procedury? www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Iskar Napisano Wrzesień 2, 2007 Zgłoś Share Napisano Wrzesień 2, 2007 Po kiego używać tu wstawki asm jak wystarczy napisać samo 'p' dla wywołania procedury ? Autor tak chciał więc tak napisałem Link do komentarza Udostępnij na innych stronach More sharing options...
KKKas Napisano Wrzesień 2, 2007 Zgłoś Share Napisano Wrzesień 2, 2007 no ale jak by rejestry byly zmieniane wewnatrz procedury? Nie chce mi się sprawdzać, ale na 90% jest to obsługiwane wewnątrz procedury. Tzn na jej początku odkładane są używane rejestry, a na końcu zdejmowane ze stosu. ҉ Link do komentarza Udostępnij na innych stronach More sharing options...
Maciek_ Napisano Wrzesień 2, 2007 Autor Zgłoś Share Napisano Wrzesień 2, 2007 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 More sharing options...
Blind Napisano Wrzesień 2, 2007 Zgłoś Share Napisano Wrzesień 2, 2007 Jeszcze zalezy co wywolujesz, procedure czy metode, jak metode to pewnie musisz jeszcze wyslac jakies info o obiekcie do ktorego nalezy wywolywana metoda. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
Maciek_ Napisano Wrzesień 2, 2007 Autor Zgłoś Share Napisano Wrzesień 2, 2007 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 More sharing options...
KKKas Napisano Wrzesień 2, 2007 Zgłoś Share Napisano Wrzesień 2, 2007 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.