String (URLDownloadToFile) Frage



  • Guten Tag zusammen

    Wenn ich zwei Strings verketten will funktioniert das. Ungefähr so:

    string test1 = "Hallo";
    string test2 = "du";
    
    cout << test1 + test2 << endl;
    

    Aber sobald ich das in URLDownloadToFile schreibe funktioniert es nicht mehr.

    Mein Code:

    string test1 = "C:/";
    	string test2 = "lol.txt";
    	string test3 = test1 + test2;
    
    		URLDownloadToFile(NULL,TEXT("http://127.0.0.1/test/test.txt"),TEXT(test3),0,NULL);
    

    So funktioniert es nicht. Fehlerausgabe:

    error C2065: 'Ltest3': nichtdeklarierter Bezeichner
    

    Vielen Dank für die Hilfe 🙂



  • Das TEXT-Makro kannst du nur für Literale benutzen.



  • Hui danke für die rasche Antwort 🙂

    Ich habe nun TEXT() entfernt. Nun bekomme ich diesen Fehler (Den ich mit TEXT() wegbekam)

    'URLDownloadToFileW': Konvertierung des Parameters 3 von 'std::string' in 'LPCWSTR' nicht möglich
    


  • 1. Benutze c_str() deines Strings.
    2. Benutze std::wstring und L"mein String" oder stell dein Projekt auf nicht Unicode um oder benutze Konvertierungsfunktionen.

    Aus dem Thread: http://www.c-plusplus.net/forum/276277
    Folgender Link: http://www.c-plusplus.net/forum/viewtopic-var-t-is-260205-and-start-is-10.html



  • Hallo

    Danke.
    Jetzt habe ich es so gemacht:

    string  test1 = L"C:/";
    	string  test2 = L"lol.txt";
    	string  test3 = test1 + test2;
    
    	URLDownloadToFile(NULL,TEXT("http://127.0.0.1/test/test.txt"),StringW(std::wstring::c_str(test3)),0,NULL);
    

    Fehlermeldung:

    error C3861: "StringW": Bezeichner wurde nicht gefunden.
    


  • wstring  test1 = L"C:\\"; 
        wstring  test2 = L"lol.txt"; 
        wstring  test3 = test1 + test2; 
    
        URLDownloadToFile(NULL,TEXT("http://127.0.0.1/test/test.txt"),test3.c_str(),0,NULL);
    


  • Danke! Das funktionierte. Leider funktioniert aber dies hier wieder nicht:

    string test2 = getenv("TEMP");
    wstring  test3 = test2 + "/lol.txt";
    
    URLDownloadToFile(NULL,TEXT("http://127.0.0.1/test/test.txt"),test3.c_str(),0,NULL);
    


  • Weil string und wstring verschiedener größe sind, kann man diese nicht gleichsetzen. Siehe z.B. hier: http://www.c-plusplus.net/forum/viewtopic-var-t-is-168607.html



  • Genius schrieb:

    Hallo

    Danke.
    Jetzt habe ich es so gemacht:

    string  test1 = L"C:/";
    	string  test2 = L"lol.txt";
    	string  test3 = test1 + test2;
    
    	URLDownloadToFile(NULL,TEXT("http://127.0.0.1/test/test.txt"),StringW(std::wstring::c_str(test3)),0,NULL);
    

    Fehlermeldung:

    error C3861: "StringW": Bezeichner wurde nicht gefunden.
    
    URLDownloadToFile(NULL,TEXT("http://127.0.0.1/test/test.txt"),stringutil::StringW(test3.c_str()),0,NULL);
    


  • Ich danke euch allen für die hilfreichen Antworten! 🙂

    Es funktioniert nun damit:

    #include <vector>...
    std::wstring convertStringToWstring(const std::string& str)
    {
        const std::ctype<wchar_t>& CType = std::use_facet<std::ctype<wchar_t> >(std::locale());
        std::vector<wchar_t> wideStringBuffer(str.length());
        CType.widen(str.data(), str.data() + str.length(), &wideStringBuffer[0]);
        return std::wstring(&wideStringBuffer[0], wideStringBuffer.size());
     }
    

Log in to reply