2008-12-01 11 views
0

Je télécharge une chaîne de texte à partir d'un service Web dans un RBuf8 en utilisant ce type de code (cela fonctionne ..)RBuf8 char * dans Symbian C++

void CMyApp::BodyReceivedL(const TDesC8& data) { 
    int newLength = iTextBuffer.Length() + data.Length(); 
    if (iTextBuffer.MaxLength() < newLength) 
     { 
      iTextBuffer.ReAllocL(newLength); 
     } 
    iTextBuffer.Append(data); 
} 

Je veux ensuite convertir le RBuf8 en omble chaîne * je peux afficher dans une étiquette ou tout .. ou aux fins de débogage, affichage dans

RDebug::Printf("downloading text %S", charstring); 

modifier pour plus de clarté ..

Ma conversion foncti sur ressemble à ceci ..

void CMyApp :: DownloadCompleteL() { { RBuf16 buf; buf.CreateL (iTextBuffer.Length()); buf.Copy (iTextBuffer);

RDebug::Printf("downloaded text %S", buf); 
    iTextBuffer.SetLength(0); 
    iTextBuffer.ReAlloc(0);         
} 

Mais cela provoque toujours un blocage. J'utilise S60 3rd Edition FP2 v1.1

Répondre

1

Ce que vous devrez peut-être est quelque chose à l'effet de:

RDebug::Print(_L("downloaded text %S"), &buf); 

This tutorial peut vous aider.

1

void RBuf16 :: Copy (const TDesC8 &) prendra un descripteur 8bit et le convertira en un descripteur 16 bits.

Vous devriez pouvoir afficher n'importe quel descripteur 16 bits sur l'écran. Si cela ne semble pas fonctionner, publiez l'API spécifique que vous utilisez.

Lorsqu'une API peut être utilisée avec un nombre indéfini de paramètres (par exemple RDebug :: Printf (const char *, ...)),% S est utilisé pour "pointeur vers le descripteur 16 bits". Notez les% S majuscules.

0

Merci, le% S est un rappel utile.

Toutefois, cela ne semble pas fonctionner .. ma fonction de conversion ressemble à ceci ..

void CMyApp::DownloadCompleteL() { 
    { 
     RBuf16 buf; 
     buf.CreateL(iTextBuffer.Length()); 
     buf.Copy(iTextBuffer); 

     RDebug::Printf("downloaded text %S", buf); 
     iTextBuffer.SetLength(0); 
     iTextBuffer.ReAlloc(0);     
    } 

Mais cela provoque encore un accident. J'utilise S60 3rd Edition FP2 v1.1

-1

Comme indiqué par quickrecipesonsymbainosblogspotcom, vous devez passer un pointeur vers le descripteur.

RDebug::Printf("downloaded text %S", &buf); //note the address-of operator

Cela fonctionne parce que RBuf8 est dérivé de TDes8 (et même avec les versions 16 bits).

+0

Ceci affiche seulement la première lettre du RBuf16 – adam

+0

Vous avez probablement raison puisque j'ai raté le _L ("") de la chaîne, que Ayaz a repéré. –

0

Vous devez fournir un pointeur sur le descripteur dans RDebuf :: Printf il devrait donc être

RDebug::Print(_L("downloaded text %S"), &buf); 

Bien que l'utilisation de _L est déconseillée. La macro _LIT est préférée.