Nokioteca [Nokia] Forum: [c++] Come Istanziare Questa Classe? - Nokioteca [Nokia] Forum

Salta al contenuto

Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione

[c++] Come Istanziare Questa Classe?

#1 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 12 novembre 2007 - 17:46

sto diventando matto per instanziare un oggetto di questa classe. Il problema è la sottoclasse annidata che non mi fa andare a buon fine il costruttore perche dentro non so cosa metterci.

se faccio tipo:

CTTSClient iClient = new (Eleave) CTTSClient(<che ci metto?> vorrebbe un var di tipo Observer)



vi posto parte della classe ...

class CTTSClient : public CActive
{
public:

	class MObserver
	{
	public:
	virtual void OnSpeechCompleteL(TInt aResult) = 0;
	virtual void OnLoadVoiceCompleteL(TInt aResult) = 0;
	};

public:
	static CTTSClient* NewL(MObserver& aObserver);
	static CTTSClient* NewLC(MObserver& aObserver);
	~CTTSClient();
	...
private:
	HBufC* lastText;
	MObserver& iObserver;
	TTTSState iState;
	RTTSSession iSession;
	...
};


Spero qualcuno mi sappia dare un suggerimento,
grazie

davidino
0

#2 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7124
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 13 novembre 2007 - 08:16

Devi implementare l'interfaccia MObserver in una qualche classe, crearne una istanza e poi passarla come parametro al costruttore di CTTSClient...
La classe che implementa l'interfaccia MObserver puo' anche essere la stessa classe da cui crei l'istanza di CTTSClient, in questo caso dovrai passare il puntatore *this.

Es:
class CProva : public CBase, public MObserver
{
   void TestL();

   // From MObserver
   virtual void OnSpeechCompleteL(TInt aResult);
   virtual void OnLoadVoiceCompleteL(TInt aResult);  

   CTTSClient* iClient;
}


void CProva::TestL()
{
   iClient = new (Eleave) CTTSClient(*this);
}

void CProva::OnSpeechCompleteL(TInt aResult) 
{
  // eventuale codice
}

void CProva::OnLoadVoiceCompleteL(TInt aResult) 
{
  // eventuale codice
}


Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#3 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 18 novembre 2007 - 17:22

Ma come posso riuscire a fare questa dichiarazione di classe
class CProva : public CBase, public MObserver

se lo scope di MObserver è interna alla classe CTTSclient ?

se ci provo viene ovviamente errore...

ho provato anche cosi:

Quote

class CProva : public CBase, public CTTSClient::MObserver{


ma non sembra la strada giusta..

ciao Grazie.
0

#4 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7124
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 19 novembre 2007 - 09:52

Non avevo fatto caso al fatto che MObserver fosse stata definita all'interno di CTTSClient...

Non mi e' mai capitato di dover mettere mano su un caso del genere, approposito, e' codice di terzi oppure fa parte di tuoi smanettamenti?

In entrambi i casi, trattandosi soltanto di header, direi che puoi benissimo riscriverlo spostando la definizione di MObserver all'esterno di CTTSClient e non dovresti piu' avere alcun problema...

class MObserver
{
public:
virtual void OnSpeechCompleteL(TInt aResult) = 0;
virtual void OnLoadVoiceCompleteL(TInt aResult) = 0;
};

class CTTSClient : public CActive
{
public:
static CTTSClient* NewL(MObserver& aObserver);
static CTTSClient* NewLC(MObserver& aObserver);
~CTTSClient();
...
private:
HBufC* lastText;
MObserver& iObserver;
TTTSState iState;
RTTSSession iSession;
...
};

Messaggio modificato da Il.Socio il 19 novembre 2007 - 09:54

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#5 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 22 novembre 2007 - 00:09

No, fa parte di codice di terzi.

Questo che ho postato fa parte del codice di esempio per l'utilizzo della libreria che mi hanno dato.

Grazie per il consiglio , infatti, alla fine ho fatto nello stesso modo che hai suggerito ...
Sto prendendo un po di confidenza con il linguaggio e con l'IDE.

Comunque dovresti aggiungere nella sezione delle guide al c++ una sezione relativa al security platform (magari qualcuno si salva ...).
Io lo avevo saltato alla grande pensando di non averne bisogno ... e sono diventato matto:

La libreria con la quale devo lavorare non ha capabilities.
I progetti che facevo, di default avevano 1 capabilities settata

il risultato è che ogni volta che mandavo un sis al telefono usciva fuori l'errore di protezione. Per la storia che un applicazione non può chiamare una libreria che ha meno cap di se stessa ...

Ci sono diventato matto, non conoscevo assolutamente il discorso delle capabilities.

... ora vado avanti a sbattere la capoccia su altre cose. Ti ringrazio comunque dell'aiuto ... sicuramente mi permetterò di disturbarti ancora ...

ciao ciao
David
0

#6 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7124
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 23 novembre 2007 - 11:25

In questo caso sono stati "polli" quelli che ti hanno fornito la libreria, le librerie dovrebbero essere distribuite come minimo con l'intero set di capabilities non privilegiate, addirittura symbian consiglia di utilizzare All-TCB (ma qui ci sarebbe un po' di burocrazia da smazzare) altrimenti quella libreria non sara' mai utilizzabile all'interno di un programma che necessita di un minimo di privilegi...

Cmq. credo che tu possa ovviare utilizzando elftran.exe direttamente sul file .dll della libreria ed aggiungendo cosi' "a manina" le capabilities

Messaggio modificato da Il.Socio il 23 novembre 2007 - 11:29

Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#7 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 23 novembre 2007 - 12:48

Visualizza MessaggiIl.Socio, il 23/11/2007 - 11:25, ha scritto:

...
Cmq. credo che tu possa ovviare utilizzando elftran.exe direttamente sul file .dll della libreria ed aggiungendo cosi' "a manina" le capabilities


Questo significa che poi in qualche modo devo incapsulare la dll che ho modificato direttamente dentro al sis che installo sul telefono!

Quale è il modo per fare questo impacchettamento , ho fatto un po di prove e non mi sembra che informare il linker su quale libreria contattare per risolvere le funzioni, sia sufficiente

ciao grazie.
david
0

#8 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7124
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 27 novembre 2007 - 04:24

Per far si che la dll venga inclusa nel pacchetto sis ti basta modificare il file .pkg aggiungendo il riferimento alla dll
Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#9 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 28 novembre 2007 - 12:59

Visualizza MessaggiIl.Socio, il 27/11/2007 - 04:24, ha scritto:

Per far si che la dll venga inclusa nel pacchetto sis ti basta modificare il file .pkg aggiungendo il riferimento alla dll



in pratica devo aggiungere :

"path\to\library\library.dll" -"!:\sys\bin\library.dll"


piccolo problema :
se è davvero sys\bin il path dove copiare la libreria, vuol dire che mi serve la capability TCB.

... Per avere la TCB dalla symbian mi pare che mandare le analisi del sangue non sia sufficiente ... :-)
0

#10 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7124
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 29 novembre 2007 - 21:39

Ma no, non ti serve TCB, perche' non sarai tu a mettere i files li dentro, ci pensera' l'installer a farlo per conto tuo B)
Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#11 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 29 novembre 2007 - 22:16

Infatti è proprio l'installer che mi da l'errore.
l'errore che mi da è il seguente:

Required application access not granted

siccome stavo leggendo nella documentazione che per scrivere in sys\bin ci vuole il tcb pensavo fosse questo il problema.
Allora probabilmente è sufficiente la capabilities "Allfile". Altrimenti non so il motivo ...

Sto supponendo perché non sono ancora in possesso di un certificato "developer certificates". Quinidi non posso provare tutte le caps. Sto aspettando che la società per la quale lavoro mi fornisca il loro certificato verisign ... per poi attivare il processo.
... se mi dici che non dipende neanche da questo ... è inutile che aspetto ... e devo capire da cosa altro dipende.

ciao , e grazie ancora per le soluzioni che mi fornisci
buon lavoro.
0

#12 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7124
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 30 novembre 2007 - 11:53

No, non e' neppure questo... E' l'installer a piazzare li dentro i files, e l'installer possiede la capability TCB per poterlo fare.

Piuttosto, quali sono le capability che hai assegnato agli eseguibili della tua applicazione?
Se ad esempio assegni ReadDeviceData allora dovrai necessariamente certificare l'applicazione con il DevCert perche' quella e' una capability non raggiungibile da una semplice applicazione self-signed.

Il DevCert te lo puoi procurare anche senza la PublisherID di Verisign B)
Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#13 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 05 dicembre 2007 - 13:34

Visualizza MessaggiIl.Socio, il 30/11/2007 - 11:53, ha scritto:

Piuttosto, quali sono le capability che hai assegnato agli eseguibili della tua applicazione?


Guarda le ho provate tutte, Da nessuna a tutte le capabilities... non c'e nulla da fare
Ho provato anche a ri-creare un progetto nuovo mettendo la linea dell'inclusione della dll nel .pkg senza aggiungere altro, ma comunque sempre quell'errore durante l'installazione dell'applicazione esce fuori.
"required application not granted" ... tutto questo anche senza mettere capabilities



Quote

Il DevCert te lo puoi procurare anche senza la PublisherID di Verisign ;-)

suggerimenti?

ciao, grazie
0

#14 L   Il.Socio 

  • Nokioteca Staff
  • Gruppo: Moderatore
  • Messaggi: 7124
  • Iscritto: 02 dicembre 2005
  • Località:Torino
  • Cellulare:N8-00

Inviato 05 dicembre 2007 - 19:38

Vedi qui...
Per visualizzare questo link registrati o esegui il log in.


Riguardo al devcert, nella sezione programmi->3rd c'e' una guida apposita che spiega passo-passo come ottenerlo...
Per segnalare allo Staff un messaggio non conforme al regolamento è sufficiente premere il bottone "Segnala" posizionato in basso a sinistra di ciascun messaggio.
0

#15 L   david.ino 

  • Member
  • PuntoPunto
  • Gruppo: Utente
  • Messaggi: 16
  • Iscritto: 01 giugno 2007
  • Cellulare:nokia N80

Inviato 13 dicembre 2007 - 18:35

Visualizza Messaggidavid.ino, il 29/11/2007 - 22:16, ha scritto:

Required application access not granted


Ho risolto!
(lo posto, magari servirà a qualcuno ... )

la dll che includevo nel pacchetto era stata compilata con tutte le caps.
il certificato con il quale signavo l'applicazione invece tutte quelle caps non le aveva affatto.
Da qui l'errore di sopra.

La soluzione è stata quella di togliere le caps di troppo nella dll con il programma da linea di comando
elftran.exe
0

Condividi questa discussione:


Pagina 1 di 1
  • Non puoi iniziare una nuova discussione
  • Non puoi rispondere a questa discussione