1 / 12

Symbian ohjelmointi

Symbian ohjelmointi. Ti5315200 Symbian ohjelmointi 3. harjoitus Juha Turunen (juha.turunen@lut.fi). Sisältö. Deskriptorit DLL:t 2 harjoitustehtävää. TDesC metodit. Locate() Compare() Find() Fold & collate variantit Left(), Mid(), Right() Alloc(), AllocL(), AllocLC()

nile
Download Presentation

Symbian ohjelmointi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 <header.h> • 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

More Related