Du solltest anfangen, const-korrekt zu programmien.
Wenn deine Funktion den übergebenen String nicht verändert,
dann sollte die Signatur lauten:
void xyz( const char* sss )
In so einem Fall kannst du den CString direkt an die Funktion
übergeben. CString hat einen Konvertieroperator mit, der
eine Konvertierung auf const char* ermöglicht. Es ist dann kein
cast notwendig, so wie es sein sollte.
Verändert aber die Funktion den übergebenen String, dann
lautet die Signatur:
void xyz( char* sss )
In diesem Fall solltest du den CString nicht zurechtcasten, dafür
wurde er nicht vorgereitet. In dem Fall brauchst du
CString::GetBuffer.
Diese Funktion liefert dir einen entsprechenden Pointer über den du
auch schreibend auf den CString zugreifen kannst. Es ist ebenfalls
kein cast notwendig.
Summa-summarum: Es gibt in der MFC Programmierung Fälle in denen
man um einen cast nicht herum kommt. Das ist meist der Fall wenn
man in irgendwelchen Controls irgendwelche Daten im ItemData
ablegt und wieder zurückholt. Da gehts nicht anders und da muss man
casten. Aber ansonsten solltest du praktisch jeden cast als
'Ruhigstellen des Compilers im Fehlerfall' ansehen und nach
Möglichkeiten suchen, sodass kein cast notwendig ist.