leistungen  •  referenzen  •  download
Einführung

Ehrlich gestanden handelt es sich bei EasyCOM um ein bereits in die Jahre gekommenes Beispiel. Das spiegelt sich auch in der Tatschache wieder, dass der Quellcode sich noch in einem Visual Studio 6 Projekt befindet. Dennoch, für alle die gern wissen wollen, wie man eine COM–Komponente "from scratch" bauen kann, wird dieses Beispiel auf jeden Fall hilfreich sein.

Teil I

Im ersten Teil von EasyCOM wird veranschaulicht, welche grundsätzlichen Schritte überhaupt notwendig sind, um die Kommunikation zwischen einem COM–Client und seinem Server zu etablieren. Es ist ein wirklich simples Beispiel, dessen Aufgabe schlicht und einfach darin besteht, eine Zahl an den Server zu übermitteln, um diese Zahl später auf Verlangen des Clients wieder zurückzugeben.

Nachdem nun beide Komponenten kompiliert, der COM–Server registriert und danach auch noch der COM–Client gestartet wurde, kann man die Kommunikation testen. Hierzu gibt man im Fenster des Clientprogramms eine beliebige Zahl ein und klickt danach den Button [Put]. Dieser nun im Server zwischengespeicherte Wert kann im Anschluss vom COM–Client durch klicken des Button [Get] wieder abgefragt werden. Nachfolgende Abbildung zeigt das Dialogfenster des Clients. Der Server selbst verfügt über keinerlei Benutzeroberflächen, die man hier zeigen könnte.

Teil II

Im Gegensatz zum COM–Server aus Teil I, ist der COM–Server in Teil II nicht als DLL, sondern als eigenständiger Prozess, also als EXE–Datei, aus­gelegt. Diese grundlegende Änderung ist nötige, wenn man zum Beispiel plant, den Server via DCOM, also über ein Netzwerk, anzusprechen.

An dieser Stelle noch ein paar Worte zum allgemeinen Verhalten. Anders als im Teil I, stellt der COM–Server dieses Beispiels eine Benutzeroberfläche zur Verfügung. Aufgabe des Clients ist es nun, die entsprechende Methode des COM–Servers aufzurufen und auf deren Rückgabewert zu warten. Folgende Abbildung zeigt sowohl das Fenster des Clients als auch den Dialog des Servers, der durch klicken des Buttons [Show the Dialog] auf­gerufen wird.

Teil III

Der dritte Teil von EasyCOM beschäftigt sich mit der Findung einer Antwort auf die Frage Wie kann der Server den Client benachrichtigen? Hierfür sollten der Client und sein COM–Server einen Mechanismus für den "Rückruf" vereinbaren, mit dessen Hilfe der Server in die Lage versetzt wird, eine Funktion des Client aufzurufen. Um dies zu bewerkstelligen stellt der COM–Server dem Client ein spezielles Interface zur Verfügung, das durch den Client implementiert werden muss.

Vereinfacht ausgedrückt geschieht folgendes: Der Client erzeugt als erstes eine Instanz des COM–Servers mit dem er zusammenarbeiten will. Gelingt dies, wird im zweiten Schritt dem Server mitgeteilt, welche der Klassen des Clients das Verbindungsinterface implementiert. Von da an kann der Server, wann immer er will, der so verbundenen Clientanwendung mitteilen, wenn sich beispielsweise die Daten des Servers geändert haben. Folgende kleine Sequenz soll dieses grundsätzliche Verhalten etwas genauer verdeutlichen.

Teil IV

Im vierten Teil wird versucht, aus dem zuvor in Teil II erstellten Server eine DCOM–taugliche Variante zu erzeugen. Da sich die Implementierung eines COM–Servers im Grunde nicht von der eines DCOM–Servers unterscheidet, wird auch in der Praxis des Öfteren so vorgegangen. Denn die größte Schwierigkeit bei der Umsetzung eines DCOM–Servers besteht darin, die Windows–Sicherheitsschichten so zu konfigurieren, dass der COM–Server "von außen" auch erreicht werden kann.

Der einfachste Weg das Tool zur DCOM–Konfiguration aufzurufen, ist die Eingabe des Befehls dcomcnfg, zum Beispiel an einer Kommandozeile. Je nach Betriebssystem sieht das im Anschluss an die Befehlseingabe gestartete Konfigurationsprogramm auch unterschiedlich aus. Gleich ist jedoch in allen Tools, dass man sich erst einmal bis zu dem DCOM–Server durchhangeln muss, der konfiguriert werden soll.

Hat man den gewünschten Server nun endlich gefunden, gilt es als nächstes die Zugriffsrechte des Servers entsprechend einzustellen. Hierfür wird der Eigenschaftsdialog des COM–Servers aufgerufen und dort die Zugriffsrechte so eingestellt, dass der Einfachheit halber "Jeder" Zugriff auf diesen Server erhält. In Windows XP sehen das DCOM–Konfigurationsprogramm und dessen Eigenschaftsdialoge wie folgt aus:

Mindestens genauso wichtig, wie die Anpassung der Zugriffsrechte für den DCOM–Server, ist eine Veränderung des Clientcodes selbst. Denn erst durch diese Änderung wird das hier vorgestellte Beispiel überhaupt funktionieren.

Die Anpassung der Clientsoftware erfolgt in der Klasse CClientDlg und dort in der Methode OnBtnInfo() und zwar derart, dass das Stringliteral DestMachine durch den realen Namen des Computers ersetzt wird, auf dem der DCOM–Server installiert wurde!

Viel Spaß beim herumprobieren…

kontakt  •  impressum