12
Symbian ohjelmointi Ti5315200 Symbian ohjelmointi 3. harjoitus Juha Turunen ([email protected])

Symbian ohjelmointi

  • Upload
    nile

  • View
    53

  • Download
    0

Embed Size (px)

DESCRIPTION

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() - PowerPoint PPT Presentation

Citation preview

Page 1: Symbian ohjelmointi

Symbian ohjelmointi

Ti5315200 Symbian ohjelmointi

3. harjoitus

Juha Turunen ([email protected])

Page 2: Symbian ohjelmointi

Sisältö

• Deskriptorit• DLL:t• 2 harjoitustehtävää

Page 3: Symbian ohjelmointi

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

Page 4: Symbian ohjelmointi

TDes metodit

• Append()• Copy()• Uppercase(), Lowercase()• Insert()• Delete()• jne...

Page 5: Symbian ohjelmointi

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

Page 6: Symbian ohjelmointi

Exe3prob1

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

Page 7: Symbian ohjelmointi

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

Page 8: Symbian ohjelmointi

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

}

Page 9: Symbian ohjelmointi

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

Page 10: Symbian ohjelmointi

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

Page 11: Symbian ohjelmointi

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

Page 12: Symbian ohjelmointi

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