Delphi 5.0 + WinAPI32 kerdes
Gabor Braun
gbraun at lli.hu
Fri Mar 4 18:30:27 CET 2005
Hi,
Rosszul adod at a memoria blokk cimet a readfile-nak, ezert nem a megadott
teruletre, hanem a stackon foglalt pmem pointertol kezdi atirni a memoriat.
Helyesen:
b := ReadFile( F, pMem^, Size, BytesRead, Nil);
csao,
gabor
----- Original Message -----
Jó reggel(i)t Mindenkinek!
Már két napja küzdök az alábbi problémával:
változó méretű (1kByte .. 1MByte) file-t kell beolvasnom a memória korábban
lefoglalt területére.
Azért kell az obj-ban is megjelölt API hívásokkal küzdenem, mert a
lefoglalt, majd a file byte-jaival feltöltött memóriaterület THandle típusú
handle-jét (ezt a memóriafoglalást végző API függvény adja vissza) további
adatfeldolgozás céljából át kell adnom egy másik függvénynek.
Na és most jön a tényleges gond:
tapasztalatom szerint ha a file mérete meghaladja a kb. 30kB-ot, az API-s
ReadFile() függvény visszatérési értéke False lesz, a GetLastError() pedig
998-as hibakóddal jelez hibát (ennek jelentése: Invalid access to memory
location) a 0 hibakód helyett. Ugyanakkor a mem. foglalással semmi gond, sok
megabyte-ig képes memóriát foglalni (tesz célból minden memóriafoglalás ill.
kezelés után a GetLastError()-t meghívom, a kapott hibakódott
MessageDlg()-vel kiíratom).
De itt van egy rövidített kódrészlet (igyekeztem a Windows API
függvényeneveket konstansokat "eredetiben" használni):
---
Const
FILE_NAME : PChar = 'c:\projects\refete\exe\1.doc';
Var
F : Integer;
Size : DWORD;
BytesRead : DWORD;
hMem : DWORD;
pMem : Pointer;
b : Boolean;
ErrCode : Integer;
begin
F := CreateFile( FILE_NAME,
GENERIC_READ,
FILE_SHARE_READ,
Nil,
OPEN_EXISTING,
0,
0 );
Size := GetFileSize( F, @BytesRead );
hMem := GlobalAlloc( GHND, Size );
pMem := GlobalLock( hMem );
b := ReadFile( F, pMem, Size, BytesRead, Nil);
ErrCode := GetLastError;
MessageDlg( 'ReadFile hibakód: ' + IntToStr(ErrCode), mtError, [mbOk],
0 );
CloseHandle( F );
GlobalUnlock( hMem );
---
Ha valaki tud, kérem adjon tippet, mi oka lehet annak, hogy a ReadFile() nem
tud nagyobb file-okat beolvasni?
--
Üdv:
Moravcsik Szilárd
mailto:mszilard at contarex.hu
More information about the Elektro
mailing list