Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 3.487 pregleda

Najnovija ↓

Pointeri i cithanje bytova iz memorije 12.03.2004. u 11:30 · pre 275 meseci #1
Posto sam tako rekoc novopechen Delphijash zanima me sledeche.

Znam kako Delphi tretira Pointere i variable pointera definiranaog tipa.
No sto me interesira, znam da treba biti pazljiv kod velicine deklariranog pointera, no znam kako dobijem naprimer bytove iz memorije i pointere na definiran tip pointera recimo Integer (4 byta) iz memorije recimo uz pomoch CopyMemory API-a.

Kako bi mogao da citham/mjenjam pointere kao array-e bytova iz memorije sa CopyMemory-em i to bez definisanog tipa, samo bi length kod API funkcije menjao i pazio da ne dodjem do kakvih R/W pogresaka kod addrese ili do kakvih BSOD-a !

Cithati/mjenjati hochu blockove memorije i to sa tim API-em.
Kako to ?

Sa vech definiranim tipovima pointera nije problem, kako mi nije bio problem ni u VB-u (ByVal i ByRef) kod tog API-a, no kod delphia to je malo teze no i nemam josh toliko iskustva sa njime i pointerima.

Moze mi tko dati koji primjer, jer stvarno nisham nasao nesto slicnog na netu !

vech unaprijed hvala.
Potpis
Pozdrav StratOS
"Multitasking - ability to f##k up several things at once."
"It works better if you plug it in."
"As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications."
"The one who is digging the hole for the other to fall in is allready in it."
Re: Pointeri i cithanje bytova iz memorije 17.03.2004. u 13:51 · pre 275 meseci #3
Pazi ovako, Delphi ti pruza mnogo mocnije manipulacije pointerima nego sto mozes i da zamislis. Postoji U Delphi-ju vec deklarisan tip za to
Code:

  PByteArray = ^ByteArray;
  ByteArray = array[0..maxint div 16] of byte; // pravi opseg..?


sledi

Code:

  var
    MyPArray: PByteArray;
    anyByte: byte;
    anyNumber: double;

  begin
     anyNumber := 1234567.890123456;
     MyPArray := @anyNumber;
     anyByte := MyPArray^[0];   // deo mantise ili eksponenta ??? 
  end;


Moras DOBRO da pazis na opseg i da znas sta radis sa ovakvim pointerima, jer u gornjem primeru oni jasu 'tudju' memoriju. A mozes uvek i od sistema da zatrazis da ti da 'tvoju' memoriju

Code:

  GetMem(MyPArray, 1024);  // dobio si blok od 1KB na heap-u


ali ne zaboravi negde/nekad i da ga oslobodis

Code:

  FreeMem(MyPArray);


inace imas cisti memoryleak (heap je deo programske memorije).

To bi bilo to

Rajko

P.S. A pazi tek ovo (gornji primer u skracenoj verziji):

Code:

  anyByte := (PByteArray(@anyNumber))^[0];


Mozda je cak jedan par zagrada ovde suvisan, ali ovako znam da radi sto posto...

P.P.S. I jos nesto, mani se CopyMemory; koristi iz Delphi Pascal-a funkciju move(), koja uprkos nazivu, radi kopiranje svega i svacega.
Re: Pointeri i cithanje bytova iz memorije 25.03.2004. u 15:58 · pre 275 meseci #4
Hvala, rjeshio problem

steta sto odmah nisam postao

Hvala svima josh jedanput !
Potpis
Pozdrav StratOS
"Multitasking - ability to f##k up several things at once."
"It works better if you plug it in."
"As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications."
"The one who is digging the hole for the other to fall in is allready in it."
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme