FtpGetCurrentDirectoryW' : cannot convert parameter 2 from 'class CString' to 'unsigned short *'



  • Hi Leute, ich komme grade absolut nicht weiter:

    FtpGetCurrentDirectory(hFtpConnect,cs_remotefile,0);
    						cs_remotefile += cs_ladeliste+ "_verladen.txt";
    

    Fehlermeldung:

    error C2664: 'FtpGetCurrentDirectoryW' : cannot convert parameter 2 from 'class CString' to 'unsigned short *'

    Ich bekomm es nicht auf die Reuhe das so zu konvertieren, dass der Compiler das so akzeptiert. Weis jmd. von euch wie ich das machen kann?
    Gruß Basti



  • FtpGetCurrentDirectory(hFtpConnect,(LPTSTR)cs_remotefile,0);

    kanns aber momentan nicht testen, also ohne Gewähr 😕

    der 3. Parameter ist die Länge des Buffers. 0 ist da wohl etwas kurz.

    grüssle 🙂



  • also mit:
    FtpGetCurrentDirectory(hFtpConnect,(LPTSTR)cs_remotefile,0);
    gibt es:
    'type cast' : cannot convert from 'class CString' to 'unsigned short *'

    und mit:
    FtpGetCurrentDirectory(hFtpConnect,(LPCTSTR)cs_remotefile,0);
    gibt es:
    FtpGetCurrentDirectoryW' : cannot convert parameter 2 from 'const unsigned short *' to 'unsigned short *'

    😞



  • probiers mal so:

    TCHAR cs_remotefile[256];
    
    	FtpGetCurrentDirectory(hFtpConnect,cs_remotefile,256);
    

    musst danach nur noch den TCHAR in einen CString conv.

    grüssle 🙂



  • Oder mit GetBuffer():

    FtpGetCurrentDirectory(hFtpConnect,cs_remotefile.GetBuffer(256),256);
    cs_remotefile.ReleaseBuffer;
    ...
    


  • ah, danke CStoll, GetBuffer hat wunderbar funktioniert 🙂
    Gruß Baschtl



  • Nur mal zur Erklärung des Problems (für dich und andere): CString lässt sich zwar in einen TCHAR* konvertieren - allerdings in einen konstanten. Und es wäre auch sehr ärgerlich, wenn du über TCHAR* Funktionen dort etwas reinschreibst, ohne den String davon zu informieren. GetBuffer(n) reserviert sich als erstes ausreichend Platz für (mindestens) n Zeichen plus Null-Terminator und gibt einen nicht-konstanten Zeiger auf diesen Bereich zurück. Gleichzeitig merkt es sich intern, daß der Datenspeicher gerade schreibend verwendet wird.

    (und ReleaseBuffer() setzt diese Marke wieder zurück)


Anmelden zum Antworten