CreateProcess und CString fuer die Parameter



  • Hallo,

    ich hab ein Problem mit der Funktion CreateProcess() zum starten eines neuen Prozesses...Also an sich funktioniert das bei mir, ich starte z.b. den IExplorer mit einer bestimmten Seite: z.b. so
    ProgRunning = CreateProcess(TEXT("iexplore.exe"),
    TEXT("www.google.de")), usw.

    So, jetzt wollte ich, dass der 2. Parameter aus einem CString kommt, damit ich den explorer mit unterschiedlichen URLs starten kann. Das soll dann in etwa so aussehen:
    ProgRunning = CreateProcess(TEXT("iexplore.exe"),
    myFoo->getUrl(),usw.

    Wenn ich das so mache, kriege ich zwar keine Compilerfehler, aber in der URL ist dann auch ein leerer String (obwohl ich mir den vorher noch über ne MessageBox ausgeben lassen kann...)....Dann habe ich es mit TEXT(myFoo->getUrl()) versucht, aber das bringt Compilerfehler....

    ...was kann ich denn da nun tun??....Ich würde wirklich gerne einen CString verwenden...Weiß jemand was???



  • CString strArgs = _T("args");
    CreateProcess(..., strArgs.getBuffer(), ...)
    strArgs.ReleaseBuffer();
    


  • Hallo,

    vielen Dank für deinen Beitrag. Leider hilft er mir nicht wirklich weiter....das Problem ist, dass ich ja die args nicht als Konstante vorliegen hab und demzufolge
    CString strArgs = _T("args");

    schon gar nicht funktioniert. Da kriege ich immer Compilerfehler.....Die args sind bei mir in einer CString-Variablen...das heißt, entweder muß ich es irgedwie schaffen, die Daten aus dem CString im richtigen Format rauszubekommen ODER ich muß es irgendwie schaffen, die Daten in den CString bereits im richtigen Format reinzukriegen....

    Keine Ahnnung, wie man das macht....Weißt du was??



  • Vielleicht funktioniert ja

    CString strArgs = "args"; 
    CreateProcess(..., _T(strArgs.getBuffer(255)), ...) 
    strArgs.ReleaseBuffer();
    


  • maxpower24 schrieb:

    CString strArgs = _T("args");

    Häääää????
    Das war ja nur ein Beispiel... wenn Du schon einen CString hast, dann ersetze doch einfach die Variable "strArgs" durch Deine... 😕



  • @Jochen: Du hast "ReleaseBuffer()" geschrieben. Ich dachte immer, dass man nur "ReleaseBuffer()" benötigt, wenn der String verändert wird? Oder sollte nach jedem Aufruf von GetBuffer() auch ein ReleaseBuffer() folgen?



  • Hast natürlich recht... Du kannst das ReleaseBuffer weglassen.. sorry...



  • Hallo Jochen,

    danke für deine Hilfe - leider sind wir noch nicht so richtig zum Kern des Problems gestossen. Deshalb erkläre ich das jetzt mal etwas ausführlicher:

    Also im Hintergrund läuft CORBA. Darüber bekomme ich von einem entfernten Object eine URL als char * (also 1 Byte pro Buchstabe). Diese URL wandle ich im Moment in einen CString um mit
    CString url = CString(remoteObject.getUrl());

    Den CString kann ich mir über ne MessageBox auch korrekt ausgeben lassen. Wenn ich diesen CString nun als Argument in CreateProcess() stecken will, dann hat er irgendwie keine URL - ich vermute, dass CreateProcess, dass irgendwie als UNICODE-String haben will. Diese ganzen Makros wie _T() und TEXT() funktionieren meiner Meinung nach NUR, wenn man sie mit einer Konstanten füttert - also _T("Hallo") geht. _T(url) geht nicht.

    Ich muß es also irgendwie schaffen, aus dem CString einen Unicode-string zu machen ODER bereits den CString als Unicode (also 2 Byte pro Buchstabe) zu initialisieren....Ich habe keine Ahnung, wie das geht....oder hast du noch eine andere idee??

    VIELEN DANK!



  • Versuch's mal mit T2CW() für die Umwandlung (TCHAR -> const wchar_t).

    PS: Das benötigt noch ein USES_CONVERSION; am Anfang der Funktion.

    Edit: *grübelt* Aber afaik arbeitet CreateProcess auch auf TCHAR, sollte also mit einem normalen CString zurechtkommen.
    Was kommt denn für eine Fehlermeldung?



  • Jochen Kalmbach schrieb:

    Hast natürlich recht... Du kannst das ReleaseBuffer weglassen.. sorry...

    Nee, brauchst dich nicht zu entschuldigen. War mir auch unsicher. 😉


Anmelden zum Antworten