Typcasting string & LPSTR :: MFC - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Typcasting string & LPSTR :: MFC

kuphrynkuphryn Posts: 266Member
Hi.

I would like to know a way to correctly cast a string object to LPSTR.

I have an LVITEM structure for a CListCtrl.

-----
string szText = "testing 1 2 3";
LVITEM item;
...

// Compiler does not allow this kind of typecasting.
// Note "testing 1 2 3" alone is not an option. I can
// use a string and/or CString object or allocated
// new memory and then copy the data from szText.c_str()?

item.pszText = szText;
-----

How do you get the line above to work? I have tried using a CString object, but the compiler kept responding with an error about LPSTR.

I saw members recommending CString.GetBuffer() and double casting (LPSTR)(LPCTSTR)(CString). Is there any advantage to using GetBuffer() and/or casting?

Thanks,
Kuphryn

Comments

  • AsmGuru62AsmGuru62 Posts: 6,519Member
    : Hi.
    :
    : I would like to know a way to correctly cast a string object to LPSTR.
    :
    : I have an LVITEM structure for a CListCtrl.
    :
    : -----
    : string szText = "testing 1 2 3";
    : LVITEM item;
    : ...
    :
    : // Compiler does not allow this kind of typecasting.
    : // Note "testing 1 2 3" alone is not an option. I can
    : // use a string and/or CString object or allocated
    : // new memory and then copy the data from szText.c_str()?
    :
    : item.pszText = szText;
    : -----
    :
    : How do you get the line above to work? I have tried using a CString object, but the compiler kept responding with an error about LPSTR.
    :
    : I saw members recommending CString.GetBuffer() and double casting (LPSTR)(LPCTSTR)(CString). Is there any advantage to using GetBuffer() and/or casting?
    :
    : Thanks,
    : Kuphryn
    :
    [blue]'CString::GetBuffer()' is only if you want to modify a CString object. In the case of LVITEM - member 'pszText' is LPTSTR because it can be used to GET/SET the text, so it cannot be constant. The CString on the other hand has a typecast operator, but it requires the const modifier (LP[red]C[/red]TSTR). The point is - you need a double cast here, just as you saw someone doing:[/blue][code]
    CString s ("sample 1 2 3...");

    item.pszText = (LPTSTR) (LPCTSTR) s;
    [/code]
  • kuphrynkuphryn Posts: 266Member
    Okay. Thanks.

    Kuphryn
Sign In or Register to comment.