OLE Exec bzw. OleProcedure Parameter dynamisch übergeben



  • Hey zusammen,

    benutze den C++ Builder 2010.
    Ich benutze COM um mit einem anderen Programm zu kommunizieren

    Derzeitiger Code:

    Variant param[1];
    param[0]="90";
    param[1]="55";
    ZMI.Exec (Procedure("GotoAdressAnsprechpartner") << param[0] << param[1] );
    

    Das Funktioniert !

    Nun kommen aber die Funktionsaufrufe und auch die Parameter aus einer externen Datei. Unterschiedliche Funktionen haben unterschiedliche Parameter. Manche Funktionen haben auch gar keine Parameter.

    Wie kann ich die Parameterübergabe in der Exec-Zeile oben im Code so anpassen dass Sie abhängig vom Array immer läuft?

    Hoffe ihr versteht was ich meine ^^



  • Hallo

    Du must die Parameterdatei parsen, die Parametern in ein dynamisches Array packen und den Prozeduraufruf zusammenstellen. Eine spezielle vorgefertigte Funktion gibt es dafür von C++ oder von der VCL aus nicht.

    Eventuell kannst du das mit dem dynamischen Array auch gleich weglassen und die Parameter vom Parser gleich in den Prozeduraufruf schieben.

    bis bald
    akari



  • Hey, erstmal Danke für die schnelle Antwort. Leider komme ich damit nicht weiter.

    Also nehmen wir mal an es gibt eine Funktion F1 die einen Parameter erwartet. Dann würde der Aufruf in C++ so aussehen.

    ZMI.Exec (Procedure("F1") << param[0] );
    

    Für die Funktion F2, die zwei Parameter verlangt würde es aussehen:

    ZMI.Exec (Procedure("F2") << param[0] << param[1] );
    

    Für die Funktion F3, die drei Parameter verlangt würde es aussehen:

    ZMI.Exec (Procedure("F3") << param[0] << param[1] << param[2] );
    

    Das würde dann einen ewig langen IF-ELSE geben, abhängig von den Einträgen im Feld. Und wenn ich nur bis 10 Parameter code und morgen eine Funktion rauskommt die 11 Parameter verlangt funktioniert garnix mehr.

    Das muss man doch eleganter lösen können oder?

    Gruß akazy



  • Hallo

    Ich weiß ja nicht was genau in deiner Datei drinnesteht, aber nehmen wir mal folgenden Aufbaue an :
    F1
    F2 Para1
    F3 Para1 Para2
    F4 Para1 Para2 Para3

    Dann würde der Algo fürs Parsen so aussehen (Pseudocode, fette Passagen sind konkrete Syntax) :

    [b]String S;[/b]
    WHILE (1)
    {
      nächste Zeile aus Datei lesen, wenn leer [b]break;[/b]
      Erstes Wort aus Zeile extrahieren und in S speichern;
      [b]Procedure P(S); [/b]  
      WHILE (1)
      {
        Nächstes Wort aus Zeile extrahieren und in S speichern, wenn leer [b]break;[/b]
        [b]P << Variant(S);[/b]
      }
      [b]ZMI.Exec(P);[/b]
    }
    

    In meinem Beispiel würde sich das extrahieren durch einfache String-Methoden wie Pos und SubString umsetzen lassen.
    Dazu must du eventuell noch eine Fehlererkennung- und behandlung einbauen, je nachdem wie sehr dein Programm der Datei trauen kann.

    bis bald
    akari



  • Ja klasse, funktioniert astrein 🕶

    Danke 👍


Anmelden zum Antworten