Symbian
Symbian OS Library

FAQ-0531 When is calling HBufC::Des() an error?

[Index][spacer] [Previous] [Next]



 

Classification: C++ Category: Base
Created: 10/19/2000 Modified: 09/11/2002
Number: FAQ-0531
Platform: Not Applicable

Question:
When is calling HBufC::Des() an error?

Answer:
The Des() function is often used incorrectly in EPOC code, most commonly with HBufC's:

// a function that reads from aParam
void foo(const TDesC& aParam);

void foobarL()
    {
    HBufC* buffer = HBufC::NewL(10); a ten character descriptor.

    // ...fill buffer...

    foo(buffer->Des()); // call the function that reads from buffer
    }

    The TBufC<> and HBufC classes provide the member function:

    TPtr Des();

    to enable you to modify the contents of the memory provided by the descriptor. It should be used whenever a modifiable descriptor type is needed that refers to this memory. Whenever a constant descriptor is needed, observe that both TBufC<> and HBufC derive from TDesC, and can therefore be used directly.

    So the example above should be:
      // a function that reads from aParam
      void foo(const TDesC& aParam);

      void foobarL()
        {
        HBufC* buffer = HBufC::NewL(10); a ten character descriptor.

        // ...fill buffer...

        foo(*buffer); // call the function that reads from buffer
        }