Parameterübergabe bei SDI



  • Hallo guten Morgen,
    ich programmiere mit der Visual Studi und habe mir eine SDI anwendung erzeugt. Nun Habe ich folgendes Problem :
    Wenn ich unter Projekt / EInstellungen / Debug und dann Programmargumete was rein schreibe bekomme ich einen Fehlermeldung .
    Unter einer Dialoganwendung ist das kein Problem
    was mach ich falsch ?

    Danke


  • Mod

    Was für eine Fehlermeldung und wann?



  • Wenn ich als Parameter 123 z.B eingebe , bekomme ich nach dem Compilieren die Meldung c:\Programm.......\123 kann nich gefunden werden


  • Mod

    Wenn dies eine Standard SDI Appplikation ist, dann wird 123 mit in die Befehlszeile gesetzt und die entsprechende Datei zum Öffnen für Deine Applikation gesucht. Das ist das normale Verhalten einer SDI Applikation.

    Schau mal in Deine InitInstance rein. Dort findest Du ein CCommandLineInfo Objekt. Das nimmt die entsprechende Befehlszeile ausenander und interpretiert Dein 123 als Dateiname der zu öffnenden Datei.



  • OK das hab ich gefunden aber was kann ich tun , das das Programm 123 als Parameter interpretiert und nicht als Programmnamen


  • Mod

    basti_1984 schrieb:

    OK das hab ich gefunden aber was kann ich tun , das das Programm 123 als Parameter interpretiert und nicht als Programmnamen

    CCommandLineInfo überschreiben das parsing selbst machen (so würde ich es machen).
    Oder selbst die Befehlszeile ohne CCommandLineInfo interpretieren.



  • Hab einfach
    // ParseCommandLine(cmdInfo);
    auskommentiert .
    sind damit irgendwelche konsequenzen verbunden denn es funktioniert.

    Ein zweites Problem was ich noch habe ist :
    ich möchte diesen PArameter in einem Static feld ausgeben
    hab das zu eine funktion geschrieben :
    schreibe wert (parameter )
    rufe diese funktion in Do data Exchange auf.
    de funktin schreib bloß den wert in den die variable des Static feldes und macht am ende ein UPDATEDATE() das führt zu einem fehler.
    wie kann ich das umgehen



  • basti_1984 schrieb:

    Hab einfach
    // ParseCommandLine(cmdInfo);
    auskommentiert .
    sind damit irgendwelche konsequenzen verbunden denn es funktioniert.

    Ja, die Kommandozeile wird jetzt überhaupt nicht mehr ausgewertet.

    Ein zweites Problem was ich noch habe ist :
    ich möchte diesen PArameter in einem Static feld ausgeben
    hab das zu eine funktion geschrieben :
    schreibe wert (parameter )
    rufe diese funktion in Do data Exchange auf.
    de funktin schreib bloß den wert in den die variable des Static feldes und macht am ende ein UPDATEDATE() das führt zu einem fehler.
    wie kann ich das umgehen

    Du hast die Funktion an die falsche Stelle gesetzt - UpdateData() synchronisiert die Member der Dialogklasse mit den zugeordneten Bildschirm-Elementen, bzw. ruft DoDataExchange() auf, damit das sich darum kümmert. Wenn du jetzt in der DoDataExchange() wieder einen Update-Aufruf startest, hast du eine Endlosrekursion.

    Was soll denn deine Funktion machen? Und was sucht sie in der DoDataExchange()?



  • OKay aber ich kann doch mit derFunktion GetCommandLine mir die Kommandozeile holen und dann selber asuwerten oder ?
    zumindest funktioniert es bei mir .

    Meine funktion liest aus einer datenbank einenn wert anhand des Parameters aus und schreibt ihn auf dem Bildschrim .
    das soll alles beim programmstart passieren.
    deshalb dodataexchange ode was ist die richtige stelle.



  • basti_1984 schrieb:

    OKay aber ich kann doch mit derFunktion GetCommandLine mir die Kommandozeile holen und dann selber asuwerten oder ?
    zumindest funktioniert es bei mir .

    Ja, klar kannst du das.

    Meine funktion liest aus einer datenbank einenn wert anhand des Parameters aus und schreibt ihn auf dem Bildschrim .
    das soll alles beim programmstart passieren.
    deshalb dodataexchange ode was ist die richtige stelle.

    DoDataExchange() ist definitiv NICHT die richtige Stelle - das wird wie gesagt jedes Mal aufgerufen, wenn du einen UpdateData()-Aufruf startest. Für den Programmstart ist OnInitDialog() eher geeignet.



  • Okay das ist klar aber wie mache ich das bei SDI das gibt es ja kein OnInit Dialog


  • Mod

    Etwas äquivalentes schon. OnInitialUpdate gibt es in einem CFormView, denn ich vermute Du hast ein CFormView als Fenster.
    Dann musst Du Dir einen eigenen Datenaustausch Mechanismus zwischen Dokument und View überlegen. Wenn der View auch ein CFormView ist müsstest Du Dir in OnUpdate etwas bauen, dass UpdateData entsprechend aufruft und die Daten aus dem Dokument mit dem View austauscht.



  • Hey du bist echt der größte hat alles funktioniert
    Danke nochmal


  • Mod

    basti_1984 schrieb:

    Hey du bist echt der größte

    Glaube ich nicht... meine Größe endet bei 179cm, für so etwas kommt Jochen Kalmbach wohl eher in Frage 🤡



  • Martin Richter schrieb:

    basti_1984 schrieb:

    Hey du bist echt der größte

    Glaube ich nicht... meine Größe endet bei 179cm, für so etwas kommt Jochen Kalmbach wohl eher in Frage 🤡

    😃


Anmelden zum Antworten