CString in fopen ?



  • Ich bekomme bei

    CFileDialog dlg(FALSE, DEFAULT_BITMAP_FILE_EXTENSION, DEFAULT_BITMAP_FILE_NAME, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL);
    	if(dlg.DoModal() == IDOK)
    	{
    		CString szPathName = dlg.GetPathName();
    		//Create a new file for writing
    		FILE *pFile = fopen(szPathName, "wb");
    

    den Fehler

    'fopen': Konvertierung des Parameters 1 von 'CString' in 'const char *' nicht möglich

    nur liefert mir dlg.GetPathName(); ein CString, aber fopen verlangt ein 'char *'
    Wie konvertiere ich das, oder wie umgehe ich dieses Problem ?

    Matthias



  • Also eigentlich sollte das so gehen, wie Du das machst. CString hat einen operator const char*, der so etwas i.d.R. erledigt. Ich habe den Auszug unten einfach bei mir in eine Dialog-Testapplikation reinkopiert, und es geht (VC 6.0). Und fopen will ja einen const char* und keinen ***char ****.

    Welche Umgebung, bzw. welchen Compiler benutzt Du?

    Gruss, Gio



  • Ich tippe mal spontan auf UNICODE-Probleme (CString hat einen operator LPCTSTR - normal ist das ein char*, unter Unicode hast du dort einen wchar_t*). Da mußt du entweder nachsehen, ob es eine TCHAR-generische Version von fopen() gibt, oder du verwendest T2A(), um den String zu konvertieren.



  • Gio schrieb:

    Welche Umgebung, bzw. welchen Compiler benutzt Du?

    VS 2005 SP1. Es geht auch in einem anderen Projekt (Beispiel aus dem Internet). Nur in meinem eigenen Projekt geht es nicht. Muss ich dazu noch zusätzliche Bibilotheken laden ?

    Matthias



  • pospiech schrieb:

    Nur in meinem eigenen Projekt geht es nicht. Muss ich dazu noch zusätzliche Bibilotheken laden ?

    CStoll hat dir doch schon gesagt, was du tun musst: Benutz _tfopen oder wandel den String um.



  • CStoll schrieb:

    oder du verwendest T2A(), um den String zu konvertieren.

    Bei mir ist T2A nicht bekannt. Woher bekomme ich daher diese Funktion um CString umzuwandlen?

    Matthias



  • Versuch's mal bei den String Conversion Makros.



  • Und wofür überhaupt? Setz deinen Zeichensatz entweder auf ANSI oder nimm die verdammte Funktionsform aus tchar.h -.-



  • (D)Evil schrieb:

    Und wofür überhaupt? Setz deinen Zeichensatz entweder auf ANSI oder nimm die verdammte Funktionsform aus tchar.h -.-

    Ich habe jetzt nach ANSI umgeschaltet und dann funktioniert ein

    FILE *pFile = fopen((LPCTSTR)szPathName, "wb");
    

    was du mit tchar.h meinst ist mir aber noch unklar. In der Hilfe habe ich nur den Beitrag http://msdn2.microsoft.com/de-de/library/c426s321(VS.80).aspx gefunden der mir aber nicht weitergeholfen hat.

    Matthias


  • Mod

    tchar.h enthält Makros und Definitionen, die es einem erlaben Projekte so zu schreiben, dass sie sowohl als Unicode als auch als MBCS Projkete funktionieren.
    Ganz besonders nett sind die Converter Makros wie CT2A!

    CString ist eben ein Typ, der in einem MBCS Projekt char's enthält und in einem Unicode Projekt wchar_t!

    BZW: Es gibt auch eine UNICODE Variante von fopen und eine neutrale Variante _tfopen!

    Aber das haben andere schon geschrieben, Du solltest es einfach mal beachten.



  • pospiech schrieb:

    Gio schrieb:

    Welche Umgebung, bzw. welchen Compiler benutzt Du?

    VS 2005 SP1. Es geht auch in einem anderen Projekt (Beispiel aus dem Internet). Nur in meinem eigenen Projekt geht es nicht. Muss ich dazu noch zusätzliche Bibilotheken laden ?

    Matthias

    Natürlich geht das auch bei eigenen Projekten, wenn man bei der Erzeugung des Projektes mit VS2005 die Verwendung von Unicode abschaltet.


Anmelden zum Antworten