[ Pobierz całość w formacie PDF ]
.W Win32 wszystko odbywa siê w pojedynczym segmencie iprze³¹czanie takie jest ca³kowicie zbêdne (przyp.t³um.).].Je¿eli tworzona biblioteka ma mieæ charakter uniwersalny, nale¿y stosowaækonwencjê przekazywania parametrów stdcall, w celu zachowania maksymalnejzgodnoœci z wieloma innymi platformami.Eksportowanie procedur i funkcji biblioteki powinno odbywaæ siê raczej przeznazwê ni¿ przez indeks.Poni¿szy fragment kodu z Delphi 1 ilustrujeeksportowanie przez indeks:.Function SomeFunction: integer; export;begin.end;Procedure SomeProcedure; export;begin.end;exportsSomeFunction index 1,Someprocedure index 2;zalecane eksportowanie przez nazwê ma natomiast nastêpuj¹c¹ postaæ:Function SomeFunction: integer; export;begin.end;Procedure SomeProcedure; export;begin.end;exportsSomeFunction name 'SomeFunction',SomeProcedure name 'SomeProcedure' ;Eksportowane nazwy wra¿liwe s¹ na wielkoœæ liter (case sensitive); nale¿y otym pamiêtaæ podczas deklarowania procedur/funkcji importowanych oraz wywo³añfunkcji GetProcAddr().Podczas specyfikowania nazwy biblioteki w dyrektywie external funkcjiimportowanej, mo¿na opcjonalnie podaæ rozszerzenie; domyœlnym rozszerzeniemjest.DLL.W œrodowisku Windows 3.x biblioteka DLL posiada³a tylko jeden globalny segmentdanych, dzielony miêdzy wszystkie aplikacje wykorzystuj¹ce bibliotekê(wszystkie „instancje” biblioteki), dziêki czemu mog³y one wymieniaæ danemiêdzy sob¹, jednoczeœnie bêd¹c nawzajem od siebie uzale¿nione (jednaaplikacja mog³a zak³Ã³caæ pracê pozosta³ych).W œrodowisku Win32 biblioteki DLLw³¹czane s¹ do przestrzeni adresowej poszczególnych aplikacji i wymiana takanie jest ju¿ mo¿liwa.Zmiany zwi¹zane z systemem operacyjnymZmiany w systemie operacyjnym Windows 95/NT w stosunku do Windows 3.x s¹ takdaleko id¹ce, ¿e nie mog³o to pozostaæ bez wp³ywu na niektóre elementy ObjectPascala.Rozpatrzymy kolejno poszczególne konsekwencje tych zmian.Adresowanie 32-bitoweWin32 opiera siê na „p³askim” modelu pamiêci (flat memory model), co oznacza,¿e pamiêæ aplikacji jest — w sensie logicznym — pojedynczym segmentem orozmiarze 4 gigabajtów.Wszystkie rejestry segmentowe maj¹ podczas pracy danejaplikacji tê sam¹ wartoœæ (selektor przyporz¹dkowanego jej segmentu), natomiastwskaŸniki (pointers) Object Pascala zrywaj¹ z dotychczasow¹ filozofi¹segment:offset i stanowi¹ 32-bitowe offsety w 4-gigabajtowym segmencie.Implikuje to nieobecnoœæ w 32-bitowych wersjach Delphi takich elementów, jakCSeg, DSeg, SSeg, Seg, Ofs i SPtr; fragmenty kodu wykorzystuj¹ce pamiêæsegmentowan¹ nie nadaj¹ siê wiêc do przeniesienia na grunt 32-bitowych wersjiDelphi.W zwi¹zku ze sposobem zarz¹dzania pamiêci¹ (stronicowanie na ¿¹danie — pagingon demand), straci³o równie¿ sens pojêcie „wolnej pamiêci” czy, tym bardziej,„spójnej wolnej pamiêci”; nie maj¹ wiêc sensu funkcje MemAvail()i MaxAvail().Informacjê o stanie pamiêci aplikacji mo¿na uzyskaæ przez wywo³anie funkcjiGetHeapStatus():Function GetHeapStatus: THeapStatus;gdzie typ THeapStatus jest rekordem w postaci:typeTHeapStatus = recordTotalAddrSpace: Cardinal;sTotalUncommitted: Cardinal;TotalCommitted: Cardinal;TotalAllocated: Cardinal;TotalFree: Cardinal;FreeSmall: Cardinal;FreeBig: Cardinal;Unused: Cardinal;Overhead: Cardinal;HeapErrorCode: Cardinal;end;Informacjê o wielkoœci wykorzystanej przez aplikacjê pamiêci (przydatn¹ g³Ã³wniedla celów œledzenia) mo¿na uzyskaæ za pomoc¹ funkcji TotalAllocated().32-bitowe zasobyWszystkie 16-bitowe zasoby.RES oraz.DCR musz¹ zostaæ przekszta³cone na postaæ32-bitow¹.Nie stanowi to wiêkszego problemu — nale¿y uruchomiæ edycjê zasobu(na przyk³ad za pomoc¹ Image Edidtor lub Resource Workshop) i zapisaæ go wformacie 32-bitowym.Kontrolki VBXPocz¹wszy od Delphi 2, zarzucona zosta³a obs³uga kontrolek VBX z tej prostejprzyczyny, i¿ takiej obs³ugi nie zapewnia Win32, same zaœ kontrolki uznanezosta³y przez Microsoft za prze¿ytek
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL