[ StratOS @ 12.03.2004. 10:30 ] @
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.
[ morlic @ 14.03.2004. 17:41 ] @
Daj konkretan primer, mislim da nisam razumeo sta konkretno zelis.
[ Rapaic Rajko @ 17.03.2004. 12:51 ] @
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.
[ StratOS @ 25.03.2004. 14:58 ] @
Hvala, rjeshio problem

steta sto odmah nisam postao

Hvala svima josh jedanput !