SmallCOM
SmallCOM generiert aus
COM-Typenbibliotheken auf VisualWorks ® ComConnect basierende
Smalltalk-Klassen .
Weshalb wurde
SmallCOM entwickelt
- Ausgangspunkt war das CINCOM
® Produkt ComConnect, dass Smalltalk Entwicklern die
Entwicklung von COM-Servern und COM-Clients in
VisualWorks ® ermöglichen soll.
- Insbesondere der Prozess der
Entwicklung eines Clients, der einen gegebenen COM-Server
über den vtable-Anteil seiner dualen Schnittstellen
verwenden soll erfordert mit ComConnect ein hohes Maß an
Handarbeit und Erfahrung.
- Diesen Prozess zu
automatisieren ist das Ziel von SmallCOM. Die von
ComConnect zur Verfügung gestellten Generatoren reichen
für diese Aufgabe bei weitem nicht aus. Dies ist
prinzipbedingt, da der Informationsgehalt der
C-Deklarationen der COM-Interfaces (Klasse
COMInterfaceVTableSignatures) nicht umfassend genug ist.
Eine COM-Typenbibliothek beinhaltet erheblich mehr
Informationen (in, out, retval Attribute; CoClasses,
Default Interfaces; Default Sinks; ...)
Zur Zeit beschränkt sich SmallCOM
auf VisualWorks Clients. Eine Erweiterung um die Generierung
eines VisualWorks Servergerüstes ist bei Bedarf
problemlos möglich.
Was generiert
SmallCOM im Falle eines VisualWorks Clients
Die Informationsbasis für SmallCOM
ist die Typenbibliothek des Servers für den ein
VisualWorks Client entwickelt werden soll. Aus diesen
Informationen wird das folgende generiert:
- Alle Typdefinitionen in der
Klasse COMExternalInterface für Events und Interfaces.
- Alle vtable-Signaturen in der
Klasse COMInterfaceVTableSignatures.
- Die InterfacePointer- und die
Interface-Klassen mit dem vollständigen Code für das
Marshaling der Parameter. Hierbei wird berücksichtigt,
ob es sich um [in], [in, out] oder [out, retval]
Parameter handelt. (Die Implementierung mancher
exotischen COM-Parametertypen, wie Safearrays etc., ist
bei Bedarf noch nachzuholen.) Für Enum Parameter werden
Handlerklassen generiert, die mit Symbolen für die
Enumwerte ausgestattet sind.
- EventSink Klassen für die
ausgehenden Schnittstellen. Diese sind abgeleitet von
COMEventSink und beinhalten eine vollständige
COMDispatchSpecificationTable als Literal.
- Proxyklassen für die
CoClasses und alle Interfaces, die nicht von CoClasses
als Defaultinterface oder Defaultsink implementiert
werden. Diese Proxyklassen delegieren das vollständige
Interfaceprotokoll an ihre Interfaceklassen und
registrieren sich ggf. für alle Events bei ihrer
EventSink. Diese Events werden von den Proxyklassen mit
vollständig lesbaren Symbolen (keine Underscores für
Parameternamen!) als Application Events angeboten. Die
Delegation der Interfaceprotokolle beinhaltet das
Marshaling zwischen Interfacezeigern und
Proxyobjektreferenzen.
Als Ergebnis werden alle
COM-Spezifika maximal möglich für den VisualWorks Entwickler
verborgen. Im Idealfall kann er mit vollständig generierten
Proxyklassen arbeiten, die für ihn vollkommen normale
VisualWorks Klassen darstellen, so als wäre die gesamte
Serverimplementierung in ihnen enthalten.
Was benötigt
SmallCOM
Da SmallCOM ein
Win32-Tool ist, benötigt es als Plattform Windows 95/ 98/NT/2000/XP.
Der generierte Code ist für
den Einsatz in der Entwicklungsumgebung VisualWorks
5i und 7 mit installiertem ComConnect
gedacht. Beide Produkte sind von CINCOM.
Um einen automatischen FileIn
zu ermöglichen muss die Installation den
SmallTalkCommander COM-Server registrieren.
Wie wird
SmallCOM bedient
Zunächst wird eine
COM-Typenbibliothek ausgewählt. Dies wird in der Regel
eine der Bibliotheken sein, die in der Windows Registry
eingetragen sind, kann jedoch auch einfach nur eine
.tlb-, .olb-, .dll oder .exe-Datei sein.
Nach dem Laden der
Typenbibliothek werden alle gefundenen Typen (Enums,
Interfaces und CoClasses) angezeigt. Zu jedem Typ werden
einzelne Ansichten des generierten SmallTalk Codes
erzeugt. Sollte es sich als erforderlich erweisen, kann
dieser Code manuell nachbearbeitet werden.
Es können einzelne Ansichten
mittels des SmallTalkCommander COM-Servers in das
SmallTalk-Image übertragen werden oder ein
vollautomatischer FileIn nach Markierung der gewünschten
Ansichten angestoßen werden.