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.