OLE Exec bzw. OleProcedure Parameter dynamisch übergeben
-
Hey zusammen,
benutze den C++ Builder 2010.
Ich benutze COM um mit einem anderen Programm zu kommunizierenDerzeitiger 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 Para3Dann 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