Problem unicode und memcpy



  • Nachfolgend mal die funktion
    dort die beiden memcpys bereiten mir probleme
    im origanlzustand meckert der compiler wegen wegen der typenconvertierung Cstring nach LPCTSTR aber den fehler bekomm ich zwar weg aber dann schmierts programm beim Aufruf ab

    static DWORD CALLBACK _LoadRtfCallback(
    DWORD dwCookie, // (in) pointer to the string
    LPBYTE pbBuff, // (in) pointer to the destination buffer
    LONG cb, // (in) size in bytes of the destination buffer
    LONG FAR *pcb // (out) number of bytes transfered
    )
    {

    CString *pstr = (CString *)dwCookie;

    if( pstr->GetLength() < cb )
    {
    *pcb = pstr->GetLength();
    memcpy(pbBuff, (LPCSTR)*pstr->GetString(), *pcb );//funktioniert nicht
    //memcpy(pbBuff, (LPCSTR)*pstr, *pcb );//Original
    pstr->Empty();
    }
    else
    {
    *pcb = cb;
    memcpy(pbBuff, (LPCSTR)*pstr->GetString(), *pcb );
    *pstr = pstr->Right( pstr->GetLength() - cb );
    }
    return 0;
    }


  • Mod

    Wenn CString ein Unicode String ist und Du benötigst einen MBCS String, bzw, char statt wchar_t Array, dann musst Du auch den String umwandeln.

    Du kopierst die Daten ja einfach!

    GetLength gibt die Anwazhl der Zeichen und nicht die Zahl der Bytes für einen Unicode String.

    Wenn Du einen MBCS String willst würde dies universel funktionieren.

    memcpy(pbBuff, static_cast<LPCSTR>(CT2A(pstr)), *pcb );
    


  • Ich würde CT2CA verwenden...


  • Mod

    Jochen Kalmbach schrieb:

    Ich würde CT2CA verwenden...

    Ich auch! 😉 Tippfehler!



  • .\HelpDialog.cpp(41) : error C2440: '<function-style-cast>' : cannot convert from 'CString *' to 'ATL::CW2A'

    bekomm ich dann als fehlermeldung probiert habe ich mit CW2A und CW2CA

    falls es weiterhilft ich verwende VisualStudio 2008


  • Mod

    Dann ist es natürlich *pstr


Anmelden zum Antworten