Symbian ohjelmointi
This presentation is the property of its rightful owner.
Sponsored Links
1 / 12

Symbian ohjelmointi PowerPoint PPT Presentation


  • 89 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Symbian ohjelmointi

Symbian ohjelmointi

  • Ti5315200 Symbian ohjelmointi

  • 3. harjoitus

  • Juha Turunen ([email protected])


Sis lt

Sisältö

  • Deskriptorit

  • DLL:t

  • 2 harjoitustehtävää


Tdesc metodit

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...


Tdes metodit

TDes metodit

  • Append()

  • Copy()

  • Uppercase(), Lowercase()

  • Insert()

  • Delete()

  • jne...


Ohjeita deskriptorin valintaan

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


Exe3prob1

Exe3prob1

  • Harjoitellaan deskriptorien käyttöä

  • Kirjoita koodia ”ToDo” –kohtiin ohjeiden mukaisesti

  • Varmista, että ohjelma ei vuoda muistia!


Dll k yt nn ss

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


Dll k yt nn ss1

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

      }


Dll interface freezing

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


Dll n k nt minen ja freezaaminen

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


Mit exportoida

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;}


Exe3prob2

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


  • Login