013
29.07.2003, 13:46 Uhr
ao
(Operator)
|
Zitat: |
0xdeadbeef postete Aber im Wortschatz von C++. In den templates kann dann meinetwegen sowas drinstehen wie
C++: |
template <class _T> do_something(_T bla) { call_automation_procedure(COleVariant(bla)); }
|
und dann nur in Spezialfällen eine besondere Implementation, aber Typsicherheit sollte m.E. erst so spät wie möglich aufgegeben werden.
|
Ich glaube, wir reden aneinander vorbei. Niemand programmiert eine OLE-Automation-Schnittstelle, wenn nur innerhalb eines Programms zwei C++-Klassen miteinander reden sollen.
Aber wenn jemand zum Beispiel Werte aus einer Excel-Tabelle auslesen will, dann muß er nicht fopen ("bla.xls") machen und das Format selber auseinanderfiddeln. Dann benutzt er die OLE-Automation-Schnittstelle, die Excel mitbringt. Dazu braucht er keine Template-Header, sondern nur das Exe-Programm selber. Die Programmierschnittstelle ist in standardisiertem Binärformat in der Exe-Datei enthalten. Excel dient als Automation-Server.
Der Client, der die Tabellenwerte abholt und irgendwie verarbeitet, muß auch nicht in C++ geschrieben sein. Wenn die Aufgabe einfach ist, gehts in VisualBasic oder in einer Skriptsprache wahrscheinlich viel schneller.
Leider können Basic und Javascript mit C++-Templates nichts anfangen. Man braucht einen anderen Weg, um Daten zwischen Client und Server zu übertragen. Und das geht entweder typsicher über Parameter, die typsicher in OLE-Automation-Methoden eingebaut sind, oder "halb typsicher" über VARIANT-Parameter, die eine weiche Typkennung (vt) mitbringen.
Man muß von Fall zu Fall entscheiden, ob es günstiger ist, die Daten typsicher oder in VARIANTs zu transportieren. Aber diese Entscheidung muß aus Sicht des Clients, nicht aus Sicht des Servers fallen, denn der Server wird nur einmal geschrieben, aber wenn er gut ist, dann wird er von vielen Client-Programmierern benutzt. Und die gängigen Client-Sprachen haben eine Laufzeitumgebung, die dem Programmierer das Hantieren mit VARIANTs abnimmt, so daß das dort viel einfacher ist als in C++.
Das Client-Server-Konzept sieht so aus: Der Server-Programmierer macht die Drecksarbeit, aber er macht sie einmal und so gründlich, daß die Client-Programmierer sie ein für allemal nicht mehr machen müssen.
ao |