Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 3. harjoitus Juha Turunen

Samankaltaiset esitykset


Esitys aiheesta: "Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 3. harjoitus Juha Turunen"— Esityksen transkriptio:

1 Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 3. harjoitus Juha Turunen (juha.turunen@lut.fi)

2 Sisältö Deskriptorit DLL:t 2 harjoitustehtävää

3 TDesC metodit Locate() Compare() Find() Fold & collate variantit Left(), Mid(), Right() Alloc(), AllocL(), AllocLC() –Palauttaa HBufC olion, johon on kopioitu deskriptorin sisältö Des() –Palauttaa muokattavan pointterideskriptorin dataan jne...

4 TDes metodit Append() Copy() Uppercase(), Lowercase() Insert() Delete() jne...

5 Ohjeita deskriptorin valintaan TBuf/TBufC –Pieni määrä dataa –Maksimi koko tiedossa jo käännösaikaisesti TPtr/TPtrC –Jo olemassa olevan dataan viittaaminen tai käsittely –Säästää muistia koska turhia kopioita ei synny –Kätevä esim. parsimisessa –TPtr HBufC:n sisällön muokkaamiseen HBufC –Suuri koko –Maksimikoko ei tiedossa käännösaikaisesti

6 Exe3prob1 Harjoitellaan deskriptorien käyttöä Kirjoita koodia ”ToDo” –kohtiin ohjeiden mukaisesti Varmista, että ohjelma ei vuoda muistia!

7 DLL käytännössä Funktioden kutsuminen DLL: sta –#include –MMP- filessä: LIBRARY MyDll.lib DLL: n luominen –MMP- filessä TARGET MyDll.dll TARGETTYPE DLL UID 0x1000008d KMyDllUid EXPORTUNFROZEN –Kts. Seuraavat kalvot –Kääntäjä luo.lib-tiedoston

8 Dll käytännössä Funktio, jota halutaan kutsua DLL:n ulkopuolelta pitää exportoida –Makrot: EXPORT_C ja IMPORT_C –Headerissa (.h) class MyClass { public: IMPORT_C void DoSomething(); private: void SomethingElse(); }; –Koodissa (.cpp) EXPORT_C void MyClass::DoSomething() { // blah blah }

9 DLL interface freezing Ennen kuin DLL voidaan luoda loppuun asti, täytyy sen rajapinta ’freezata’ Freezing tarkoittaa sitä, että käännöstyökalut kirjoittavat tiedoston (.def), jossa lukee missä ordinaalissa kunkin metodin tulee sijaita –Tällä tiedostolla voidaan varmistaa se, ettei metodien järjestysnumerot muutu käännöksien välillä, eikä DLL:ya vasten linkkaavia moduuleja tarvitse kääntää uudelleen –def-tiedosto luodaan (emulaattoriympäristöön käännettäessä) BWINS hakemistoon –BWINS hakemisto luodaan edelliseen hakemistoon Mikäli DLL:n MMP-tiedostossa on rivi ’EXPORTUNFROZEN’ ei freezaamista tarvitse suorittaa –DLL:n linkittävät moduulit tarvitsee kuitenkin tällöin kääntää uudelleen mikäli DLL:n funktioiden järjestys muuttuu –Tätä kannattaa käyttää varhaisessa kehitysvaiheessa ja poistaa kun rajapinnat vakiintuvat

10 DLL:n kääntäminen ja freezaaminen Käännä DLL –Joko Visual Studiosta tai komentoriviltä ’abld build wins udeb DllProjektinNimi’ –Mikäli DLL:n MMP-tiedostossa oli määriteltynä EXPORTUNFROZEN, tämä riittää Tässä vaiheessa kääntäjä on luonut DLL:n, mutta.lib-tiedoston luominen ei onnistu ilman freezaamisen synnyttämää.def-tiedostoa Freezaa rajapinta –Luo makefile ’abld makefile wins’ –Freezaa rajapinta ’abld freeze’ –Luo makefile uudelleen (tärkeää) ’abld makefile’ (jos käytät Visual Studiota myös projektitiedosto pitää luoda uudelleen ’abld makefile vc6’ Käännä DLL –Koska freezaus tuotti.def-tiedoston, voi linkkeri tuottaa nyt.lib tiedoston

11 Mitä exportoida? Kaikkia metodeja ei kannata exportoida –Turhat exportit vievät tilaa –Turhat exportit rikkovat kapseloinnin –Turhat exportit hankaloittavat ylläpitoa Exportoi kaikki metodit joita täytyy kutsua DLL:n ulkopuolelta Exportoi käytettävien luokkien konstruktorit ja destruktorit –Mikäli luokalla on staattinen kaksivaiheinen konstruktori (New, NewL, NewLC), ei C++ konstruktoria kannata (eikä saa) exportoida DLL:n tulee aina exportoida DLL entry point EXPORT_C TInt E32Dll(TDllReason) { return KErrNone; }

12 exe3prob2 Harjoitellaan ja havainnollistetaan DLL:n tekoa ja käyttöä DLL ja sitä käyttävä exe omia projektejaan –Avaa toinen abld.bat:n luoma.dsw tiedosto ja lisää workspaceen toinen projekti (Project / Insert Project into Workspace) –Käännettävää projektia voit vaihtaa klikkaamalla oikeaa hiiren nappia class viewissä projektin nimen päällä ja valitsemalla ’Set as active project’ –Muista tarkistaa että käännät kummastakin projektista debug buildin (Build / Set as active configuration) Lisää tarvittavat EXPORT_C ja IMPORT_C makrot exe3prob2dll.h ja.cpp tiedostoihin Lisää exe3prob.mmp tiedostoon rivi joka linkittää ohjelman exe3prob2dll.dll:ya vasten Kun saat ohjelman toimimaan, poista DLL:n mmp-tiedostosta EXPORTUNFROZEN määritys ja kokeile rajapinnan freezaamista


Lataa ppt "Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 3. harjoitus Juha Turunen"

Samankaltaiset esitykset


Iklan oleh Google