Thread View: pl.comp.lang.delphi
5 messages
5 total messages
Started by Pancio
Tue, 27 Nov 2018 11:08
Odczyt tablicy z DLL
Author: Pancio
Date: Tue, 27 Nov 2018 11:08
Date: Tue, 27 Nov 2018 11:08
43 lines
1397 bytes
1397 bytes
Witam, Mam pewien problem i z wielka nadzieja pisze ten post, bo moze ktos moglby mi pomoc. Mam do napisania mini gre w ktorej jedna plansza ma wymiar 20x20. Utworzylem plik z planszami i wszystko bylo w porzadku, dopoki plansze wczytywalem w ten sposob: type Poziom = record Plansza : array[1..20] of string[20]; end; var f : file; p : Poziom; begin AssignFile(f, 'nazwa pliku'); Reset(f, SizeOf(p)); Seek(f, nr_planszy); BlockRead(f, p, 1); CloseFile(f); end; Teraz jednak mam potrzebe, aby plik z planszami umiescic w wiekszym pliku z innymi zasobami DLL. No i tutaj pojawia sie problem z odczytem, bo dziala on jedynie w przypadku pierwszej planszy. Innych za diabla nie moge wczytac. Robie to tak: var H : THandle; Stream : TResourceStream; mStream : TMemoryStream; begin H := LoadLibrary('nazwa_pliku_z_zasobami.dll'); mStream := TMemoryStream.Create; try Stream := TResourceStream.Create(H, 'PLANSZE', RT_RCDATA); mStream.LoadFromStream(Stream); mStream.Seek(SizeOf(Poziom), 0); mStream.ReadBuffer(p, SizeOf(Poziom)); Stream.Free; finally mStream.Free; FreeLibrary(H); end; end; Czy moge prosic "ludzi dobrej woli" o pomoc i podpowiedz, co mam poprawic w kodzie. Wedlug mnie problem lezy w procedurze Seek, ale nie wiem, jak ustawic kursor, aby poprzez ReadBuffer wczytaj N-ty poziom gry. -- Pancio
Re: Odczyt tablicy z DLL
Author: zpksoft
Date: Wed, 28 Nov 2018 00:29
Date: Wed, 28 Nov 2018 00:29
61 lines
1771 bytes
1771 bytes
W dniu wtorek, 27 listopada 2018 20:08:56 UTC+1 użytkownik Pancio napisał: > Witam, > Mam pewien problem i z wielka nadzieja pisze ten post, bo moze ktos moglby mi pomoc. > Mam do napisania mini gre w ktorej jedna plansza ma wymiar 20x20. Utworzylem plik z planszami i wszystko bylo w porzadku, dopoki plansze wczytywalem w ten sposob: > > type > Poziom = record > Plansza : array[1..20] of string[20]; > end; > > var > f : file; > p : Poziom; > begin > AssignFile(f, 'nazwa pliku'); > Reset(f, SizeOf(p)); > Seek(f, nr_planszy); > BlockRead(f, p, 1); > CloseFile(f); > end; > > Teraz jednak mam potrzebe, aby plik z planszami umiescic w wiekszym pliku z innymi zasobami DLL. No i tutaj pojawia sie problem z odczytem, bo dziala on jedynie w przypadku pierwszej planszy. Innych za diabla nie moge wczytac. Robie to tak: > > var H : THandle; > Stream : TResourceStream; > mStream : TMemoryStream; > begin > H := LoadLibrary('nazwa_pliku_z_zasobami.dll'); > mStream := TMemoryStream.Create; > try > Stream := TResourceStream.Create(H, 'PLANSZE', RT_RCDATA); > mStream.LoadFromStream(Stream); > mStream.Seek(SizeOf(Poziom), 0); > mStream.ReadBuffer(p, SizeOf(Poziom)); > Stream.Free; > finally > mStream.Free; > FreeLibrary(H); > end; > end; > > Czy moge prosic "ludzi dobrej woli" o pomoc i podpowiedz, co mam poprawic w kodzie. Wedlug mnie problem lezy w procedurze Seek, ale nie wiem, jak ustawic kursor, aby poprzez ReadBuffer wczytaj N-ty poziom gry. > > -- > Pancio To chyba powinno być jakoś tak: mStream.Seek(SizeOf(Poziom)*(nrPlanszy-1), soFromBeginning); Jeśli numerujesz plansze od 0 to bez -1 Paweł
Re: Odczyt tablicy z DLL
Author: "konsul41@wp.pl"
Date: Wed, 28 Nov 2018 08:01
Date: Wed, 28 Nov 2018 08:01
4 lines
130 bytes
130 bytes
> mStream.Seek(SizeOf(Poziom), 0); > mStream.ReadBuffer(p, SizeOf(Poziom)); A gdzie masz czytanie pozostałych plansz?
Re: Odczyt tablicy z DLL
Author: Roman Tyczka
Date: Wed, 28 Nov 2018 08:35
Date: Wed, 28 Nov 2018 08:35
14 lines
414 bytes
414 bytes
On Tue, 27 Nov 2018 11:08:55 -0800 (PST), Pancio wrote: > Poziom = record > Plansza : array[1..20] of string[20]; > end; Taka uwaga na marginesie. Jeśli kombinujesz z zapisem do pliku to lepiej używaj packed record, co prawda dla tego rekordu to nic nie zmieni, ale pozwoli Ci to uniknąć problemów na dalszym etapie rozwoju programu i struktur danych. -- pozdrawiam Roman Tyczka
Re: Odczyt tablicy z DLL
Author: Pancio
Date: Wed, 28 Nov 2018 08:38
Date: Wed, 28 Nov 2018 08:38
6 lines
165 bytes
165 bytes
> mStream.Seek(SizeOf(Poziom)*(nrPlanszy-1), soFromBeginning); Ju ar emejzing. Wlasnie tego rozwiazania potrzebowalem. Jeszcze raz stokrotne dzięki. -- Pancio
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads