URLDownloadToFile mit Variablen



  • Hallo allesamt,
    ich habe ein kleines Problem mit der URLDownloadToFile-Funktion.

    Mein Code sieht so aus:

    HRESULT hr = URLDownloadToFile ( NULL, _T(datei.c_str), _T(speicherpfad.c_str()), 0, NULL );

    Die Variablen 'datei' und auch 'speicherpfad' sind jeweils als std::string deklariert und werden vorher vom Benutzer gesetzt.

    Nun wird mir aber folgender Fehler angezeigt:

    [BCC32 Fehler] E2451 Undefiniertes Symbol 'Ldatei'
    [BCC32 Fehler] E2451 Undefiniertes Symbol 'Lspeicherpfad'

    Wenn ich die Werte in der Funktion aber selbst setze (z.B. http://www.test.de/test.pdf und C:\Dokumente\test.pdf) funktioniert alles tadellos.

    Woran liegt das?



  • Falsches Forum, Link ist tot, jey ich hab >tausend Beiträge btw 😃 , ...



  • Link sollte nur ein Beispiel sein. Warum falsches Forum?



  • Kruspe schrieb:

    Link sollte nur ein Beispiel sein. Warum falsches Forum?

    Dieses Forum ist für Standard-C++. Du hast (soweit ich erkennen kann) WinAPI am laufen.



  • Oh, in dem Fall bitte ich darum diesen Thread an seinen Bestimmungsort zu verschieben...



  • Hey Sone, 1023 ist nicht nur >1000, sondern viel mehr, nämlich 210-1.



  • zweierkomplement schrieb:

    Hey Sone, 1023 ist nicht nur >1000, sondern viel mehr, nämlich 210-1.

    😃
    Und was genau hat das mit Raumfolgearithmetik zu tun?
    Und was ist daran so interessant?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Kruspe schrieb:

    _T(datei.c_str), _T(speicherpfad.c_str())

    😮
    Was willst du denn damit bezwecken? Ich vermute mal, dass du versucht hast einen Fehler wie "const char * kann nicht in LPCWSTR konvertiert werden" oder so aehnlich beseitigen wolltest. Oder aber einfach zwischen Unicode und Multibytezeichensatz im Projekt wechesln.
    Wie auch immer, so wie du dir das denkst funktioniert das nicht. _T() bzw. TEXT() sind Makros, keine magische Funktion, die nach Unicode umwandelt. Sie sind nur fuer Stringliterale gedacht. In C++ ist "foo" ja ein ASCII-Literal (was dann const char* entsprechen wuerde) und L"foo" ein wide-character Literal (also Unicode). _T macht im Prinzip also nix anderes als, abhaengig ob Unicode eingestellt ist oder eben nicht, entweder ein L vor das Argument in den Klammern oder gar nichts. Und so kommt auch dein Fehler zu stande: du hast Unicode eingestellt und _T auf "datei" benutzt. Der Praeprozessor ersetzt das nun durch Ldatei, was der Compiler natuerlich nicht findet.

    Konkret hast du zwei Moeglichkeiten dein Projekt wieder zum laufen zu kriegen:
    1. (unsauber aber einfacher) Entferne das _T und stelle in den Projekteigenschafften den Zeichensatz auf "Multibytezeichensatz"/
    2. TCHAR ist ja abhaengig vom Zeichensatz char oder wchar_t. Das machen wir uns zu nutze und machen ein Typedef von std::basic_string:

    #include <string>
    typedef std::basic_string<TCHAR> tstring;
    
    int main()
    {
        tstring str1(_T("String1"));
        tstring str2(TEXT("String2"));
        tstring str3 = _T("String3");
        tstring str3 = TEXT("String2");
    
        //mach was mit den strings
    }
    


  • 3. Wandle den String in Unicode um, indem du mbstowcs benutzt.
    4. Benutze einfach URLDownloadToFileA(0, datei.c_str(), speicherpfad.c_str()), 0, 0);


Anmelden zum Antworten