.NET meets COM

Datenaustausch mit COM

Sie können natürlich nicht nur fertige Controls nutzen, sondern auch mit COM-Objekten Daten austauschen. Dazu das nächste Beispiel.

Beim Beispielprojekt mit COM und ATL finden Sie ein COM-Objekt mit einem einfachen Interface und einer passenden Implementierung. Das Objekt bietet eine Methode zum Addieren von zwei Double-Werten.

interface Iadder : IDispatch{
[id(1), helpstring("method Add")] HRESULT Add([in] DOUBLE a, [in] DOUBLE b, [out] DOUBLE* c);
};

STDMETHODIMP Cadder::Add(DOUBLE a, DOUBLE b, DOUBLE* c)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
*c = a + b;
return S_OK;
}

Die beiden Zahlen werden einfach addiert und das Resultat zurückgeliefert. Mit anderen Worten: Das Objekt kann zum Addieren von Zahlen verwendet werden. Das ist zwar kein besonders umfangreiches oder sinnvolles Objekt, aber zur Demonstration reicht es völlig aus.

Um das Objekt nutzen zu können, müssen Sie natürlich zunächst das COM-Objekt-Projekt übersetzen. Im Zuge des Build-Vorgangs wird das Objekt registriert, worauf es sich auf Ihrem Rechner genauso wie alle anderen COM-Objekte darstellt.

Danach wechseln Sie in das Projekt mit Mangaged Code. Im Beispiel ist das Form des C#-Projekts mit zwei Edit-Controls, einem Button und einem Label ausgestattet.

In den Edit-Controls können Sie jeweils eine Zahl eingeben, ein Klick auf die Schaltfläche erzeugt dann das COM-Objekt, addiert die Werte und trägt das Resultat im Label ein.

Damit das COM-Objekt benutzt werden kann, ist jedoch zuvor eine Referenz auf das Objekt zum Projekt hinzuzufügen. Das erledigen Sie einfach über den Referenzen-Ordner des Anwendungsprojekts. Der "Add-Reference"-Dialog bietet drei Reiter: jeweils einen für Referenzen auf .NET-Objekte, auf COM-Objekte und auf eigene Projekte.