Probleme mit dem Ausführen eine Links in c++



  • Hi!

    ich habe folgendes Problem:

    Ich möchte einen Link in einem Browser öffnen der von mir erzeugte Variablen enthält:

    die string variable: nr (enthält einen zufallswert)
    und die string variable: wort(enthält ein zufallswort)

    string url= "http://test.de/test.php?ID="+nr+"&test="+wort;
    

    Das klappt soweit

    nun möchte ich den Link im Browser fenster öffnen:

    ShellExecute(NULL, _T("open"),_T("http://test.de/test.php?ID=1234&test=foo") , NULL, NULL, SW_SHOW);
    

    --> das funktioniert soweit alles

    wenn ich jetzt aber den String übernehmen will gibt es probleme:

    ShellExecute(NULL, _T("open"),url , NULL, NULL, SW_SHOW);
    

    FEHLERMELDUNG:

    error C2664: 'ShellExecuteW': Konvertierung des Parameters 3 von 'std::string' in 'LPCWSTR' nicht möglich
    Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden

    So funktioniert es ebenfalls nicht:

    ShellExecute(NULL, _T("open"),_T("http://test.de/test.php?ID=nr&test=wort") , NULL, NULL, SW_SHOW);
    

    Wahrscheinlich liegt das Problem darin dass die string variable zuerst noch irgendwie convertiert werden muss aber da bin ich im Moment wirklich überfordert

    hoffe auf baldige Hilfe


  • Mod

    Dein Projekt wird als Unicode Projekt kompiliert.
    string basiert auf char. Also entweder std::string konvertieren oder gleich std::wstring verwenden. Oder eine entsprechende Konvertieren wie A2T!

    Versuche mal die Grundlagen und Unterschiede zu erlernen, was es bedeutet ein Projekt in Unicode oder MBCS zu erzeugen.



  • Könntest du mir ein Codebeispiel geben wie man die Variable am Besten codiert? Im Moment versteh ich nur Bahnhof 😞



  • so wäre richtig:

    //Unicode, das Makro _T voranschreiben
    CString nr = _T("1234");
    CString wort = _T("foo");
    CString url= _T("http://test.de/test.php?ID=") +nr+ _T("&test=") +wort;
    

    Turmfalke64


  • Mod

    mr_gentleman851 schrieb:

    Könntest du mir ein Codebeispiel geben wie man die Variable am Besten codiert? Im Moment versteh ich nur Bahnhof 😞

    Dann solltest Du meine Hinweise ernst nehmen und lernen.

    string url= "http://test.de/test.php?ID="+nr+"&test="+wort;   
    ShellExecute(NULL, _T("open"),CA2T(url) , NULL, NULL, SW_SHOW);
    

    Oder projekt eben auf MBCS umstellen, oder

    string url= "http://test.de/test.php?ID="+nr+"&test="+wort;   
    ShellExecuteA(NULL, _T("open"),url , NULL, NULL, SW_SHOW);
    


  • Nur so nebenbei: std::string hat keinen Extractor für "char const*" oder "wchar_t const*".
    Es muss daher sowieso schonmal so heissen:

    ShellExecute(NULL, _T("open"), url.c_str(), NULL, NULL, SW_SHOW);
    

    Und natürlich std::wstring statt std::string verwenden.


  • Mod

    hustbaer schrieb:

    Nur so nebenbei: std::string hat keinen Extractor für "char const*" oder "wchar_t const*".

    Stimmt! 🙄 Da war ich wohl etwas schnell...


Log in to reply