views:

644

answers:

6

Hi,

I am downloading a text string from a web service into an RBuf8 using this kind of code (it works..)

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

I want to then convert the RBuf8 into a char* string I can display in a label or whatever.. or for the purposes of debug, display in

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

edit for clarity..

My conversion function looks like this..

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

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

But this still causes a crash. I am using S60 3rd Edition FP2 v1.1

+1  A: 

void RBuf16::Copy(const TDesC8&) will take an 8bit descriptor and convert it into a 16bit descriptor.

You should be able to display any 16bit descriptor on the screen. If it doesn't seem to work, post the specific API you're using.

When an API can be used with an undefined number of parameters (like void RDebug::Printf(const char*, ...) ), %S is used for "pointer to 16bit descriptor". Note the uppercase %S.

QuickRecipesOnSymbianOS
A: 

Thanks, the %S is a helpful reminder.

However, this doesn't seem to work.. my conversion function looks like this..

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

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

But this still causes a crash. I am using S60 3rd Edition FP2 v1.1

adam
A: 

As stated by quickrecipesonsymbainosblogspotcom, you need to pass a pointer to the descriptor.

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

This works because RBuf8 is derived from TDes8 (and the same with the 16-bit versions).

Mark Cheeseborough
this only displays the first letter of the RBuf16
adam
You're probably right since I missed the _L("") off the string, which Ayaz spotted.
Mark Cheeseborough
+1  A: 

What you may need is something to the effect of:

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

This tutorial may help you.

ayaz
A: 

Thankyou all

adam
A: 

You have to supply a pointer to the descriptor in RDebuf::Printf so it should be

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

Although use of _L is discouraged. _LIT macro is preferred.

Dynite