Czy ktoś wie może jak obsłużyć przerwania w delphi?Próbowałem zdeklarować w const i potem się odwoływać ale nie chciało pójść. Pomożecie? [stuk]
W trybie chronionym raczej przerwania nie obsłużysz. Jedynie jako sterownik .vxd
Dostępnych jest tylko kilka wybranych przerwań. Gdzieś na forum wypisał je chyba snaj.
vxd tak ale na stare windy teraz to raczej poczytac DDK i pisac bedace na czasie sys-e ;)
A te przerwania z ktorych mozna skorzystac to :
Przerwania ktore da sie uzyc we wstawkach (DPL=3) :
3h, 2ah, 2bh, 2ch, 2dh, 2eh
dziwne ze :
1h, 4h
mimo ze maja tez DPL=3 wywoluja Violation (na VC++ u mnie)?!
Inne maja DPL=0 i tylko kod z ring0 ma prawa do wywolania
Nawet 21h ma DPL=3 ale nie znalazlem ktore funkcje da sie
wywolac i czy w ogole
Ale jak sie pod nie podpiac pod NT - tego nie wiem i nie wiem czy jest to wykonalne bez ostrego grzebania sie w Windzie.
VXD to też dobry pomysł ale i chodziło bardziej o przerwania takie jak w C++ czyli przerwania w dostępie do pamięci a nie o przerwania do asemblera(choć nie ukrywam że też się przyda).Jak wam coś do głowy przyjdzie to poświęcie chwilkę czsu dla starego wyjadacza :P i soć skrobnijcie;)
przerwania w dostępie do pamięci a nie o przerwania do asemblera
:|
Coś tu nie teges. Są 2 rodzaje przerwań - sprzętowe i programowe - nie chce mi się pisać tu definicji, ale chyba mylisz pojęcia. Poszukaj na google jakiegoś opisu.
Przerwania w dostępie do pamięci deklarowane są jak zwykłe adresy w pamięci.Nie wiem może faktycznie to co innego ale w książce o tym było tak napisane.W każdym razie chodzi mi aby użyć czegoś takiego w programie (nie ważne jak to nazwiemy-to ma działać a nie sie nazywać ;p ):
//na przykład
0x00FFF
Do czegoś takiego można wykorzystać rejestry procesora DR0-DR3.
Ale jak to zrobić - nie wiem, bo nie potrzebowałem tego.
Poczytaj sobie strony z google - oto jedna z nich
http://my.tele2.ee/mtx/i386/chp12-02.htm
Jednak użyć tego można tylko w ring0.
Można użyć tego rajestru, ale na pewno jest jakaś prostsza ort!.<ort>przecieŻ</ort> w c++ adresy pamięci są wręcz predefiniowane i zaznaczane osobnym kolorem toteż używaja chyba jakiejś innej metody
na to bo c++ jest językiem wyskokopoziomowym w przciwieństwie do asemblera który jest językiem niskopoziomowym i bez trudu można takie coś obsłużyć.Oczywiście - wstawaka w delphi z asm ale po co?
To tylko opóżnia pracę bo musi się odwoływać a mi chodzi o zwykłe cplusplus'owskie ort! adresów i odwoływanie się do nich.
Pomóżcie(może ktoś z działu c++ będzie wiedział)!!Muszę koniecznie odwołać się do adresu bo inaczej nici z programu! [pomocy]
W Pascalu można było 'absolute' wykorzystać. W Delphi jest już ograniczone wyłącznie do zmiennych :(
Ale może tak:
var
Adres: Pointer = Pointer($12345678);
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
asm call Adres end;
end;
A w ogóle to proponuję nie pić na kilka godzin przed zadaniem pytania na forum, skoro nie masz możliwości precyzyjnego formułowania pytań po pijaku ;)