Delphi 5.0 + WinAPI32 kerdes
Moravcsik Szilárd
mszilard at contarex.hu
Fri Mar 4 07:59:55 CET 2005
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