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 abstatic 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;
}
-
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...
-
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
-
Dann ist es natürlich *pstr