- 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,
ausgelegt. 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] aufgerufen 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…
|