020
12.11.2003, 22:29 Uhr
ao
(Operator)
|
Zitat: |
RHBaum postete .... Das Construct heisst dann SAFEARRAY, und kann per Windows API ueber C Schnittstellen gehandelt werden . Nur ist das halt mega umstaendlich, auch wenn das safearray doch paar glitzekliene Vorteile besitzt, die aber niemand braucht. Am ende steckst viel arbeit rein, eigentlich nur um dein code langsam zu machen ....
|
Jein. Du zählst die Nachteile von SAFEARRAYs auf, ohne die Vorteile zu nennen. Ich tu das mal für dich.
1. Für C++ gibts viele Array-APIs, meist Template-Klassen, aber in C sind sie selten. Hier gibts mal ne Möglichkeit für C-Programmierer, ohne Zeigerarithmetik Arrays zu behandeln, und zwar mit beliebigem Elementtyp, beliebiger Dimensionszahl und beliebigen Indexgrenzen (nein, die Indizierung muss nicht mehr bei 0 beginnen). Die Arrays können zur Laufzeit angelegt, vergrößert, verkleinert und zerstört werden. Es gibt ein Range-Checking; Überschreiten einer Indexgrenze richtet keinen Schaden mehr an, sondern kann am Rückgabewert der API-Funktion erkannt werden.
Dass das alles nicht zum Nulltarif zu haben ist und mit Performance-Einbußen bezahlt werden muss, liegt wohl auf der Hand. Für zeitkritische Teile kann man sich auch einen Pointer auf den Datenbereich des Safearrays geben lassen und die Zugriffe mit Zeigerarithmetik programmieren. Das geht dann so schnell wie auf jedem anderen C-Array, man ist aber auch genauso nackt.
Die API-Funktionen sind sperrig und unhandlich, da gebe ich dir recht. Aber was hindert dich daran, einen Satz von handlichen Wrappern drumrum zu packen, die nicht so allzwecktauglich sind, aber sich besser bedienen lassen?
2. (und das ist viel wichtiger): Safearrays sind wichtig für die COM-Programmierung. COM ist eine Technologie, über die Programme miteinander kommunizieren können, unabhängig von der Sprache, in der sie geschrieben sind. Man kann also nicht nur C++-, Java-, Delphi- und Basic-Programme, sondern auch HTML-Seiten mit Javascript oder ActiveX-Controls usw. über standardisierte COM-Schnittstellen miteinander reden lassen. Das ist ein großer Vorteil.
Du kannst in C++ hochperformante Server schreiben, die irgendwelche Berechnungen anstellen, und die Ergebnisse mit Javascript über eine COM-Schnittstelle abholen und im Webbrowser darstellen.
Oder einen MP3-Decoder und Wave-Player in C++ kodieren (freie Sourcen dazu gibts massig im Internet) und mit Visual Basic in 10 Minuten eine Bedienoberfläche drüberstülpen - fertig ist der eigene MP3-Player.
Was hat das mit Safearrays zu tun? Nun, immer wenn Arrays durch COM-Schnittstellen transportiert werden, handelt es sich in Wahrheit um Safearrays. Nur - C (und C++) sind die einzigen Sprachen, in denen man das wirklich merkt, die anderen haben die Safearrays quasi nahtlos integriert.
ao |