Aufrufen von Methoden, Eigenschaften, Ereignissen

Ein .NET-Client kann Methoden für eine aktives COM-Objekt aufrufen, dessen Eigenschaften anpassen und Ereignisse vom Server empfangen. Die von der Loan-Co-Klasse (nicht verwaltetes C++, ATL) verfügbar gemachten Methoden und Eigenschaften sind als Codebeispiele in diesem Abschnitt enthalten.

Aufrufen von Methoden

Das Aufrufen von Methoden für ein COM-Objekt von verwaltetem Code ist identisch mit dem Methodenaufruf für ein verwaltetes Objekt. Da COM-Komponenten Funktionen immer über Schnittstellen verfügbar machen, können Sie die Methoden wahlweise für die Schnittstelle oder direkt für die Co-Klasse aufrufen. Eine Co-Klasse macht nur die von ihrer Standardschnittstelle verfügbar gemachten Member verfügbar. Durch den folgenden Beispielcode wird die GetFirstPmtDistribution-Methode direkt für die importierte Co-Klasse aufgerufen:

MorePmts = ln.GetFirstPmtDistribution(ln.Payment, Balance, _
               Principal, Interest)
MorePmts = ln.GetFirstPmtDistribution(ln.Payment, out Balance, 
               out Principal, out Interest);

COM-Interop führt das Marshallen von Datentypen aus. Wenn Sie z. B. den System.String-Typ an ein COM-Objekt übergeben, wird er von COM-Interop in einen BSTR-Typ konvertiert.

Parameter, die in einer Typbibliothek als [out retval] markiert sind, werden in Methodenrückgabewerte konvertiert. Der Konvertierungsprozess löscht diese Parameter aus der verwalteten Signatur. Standardmäßig wird von der Common Language Runtime eine Ausnahme an den verwalteten Code ausgelöst, indem das Fehler-HRESULT einer entsprechenden verwalteten Ausnahme zugeordnet wird.

Abrufen und Einstellen von Eigenschaften

COM-Schnittstellen können Eigenschaften als Schnittstellenmember enthalten. Sie können von einem COM-Objekt verfügbar gemachte Eigenschaften auf dieselbe Weise abrufen oder festlegen wie Eigenschaften, die von einer verwalteten Klasse verfügbar gemacht werden. Als Metadaten in eine Assembly importierte COM-Schnittstellen und Co-Klassen machen Eigenschaften und Accessormethoden für jede Eigenschaft verfügbar. Im folgenden Codebeispiel wird die OpeningBalance-Eigenschaft festgelegt:

ln.OpeningBalance = Convert.ToDouble(Args(1))
ln.OpeningBalance = Convert.ToDouble(Args[0]);

Detaillierte Informationen zur Konvertierung von Eigenschaften finden Sie unter Konvertieren importierter Member. Eine allgemeine Beschreibung der Eigenschaften in .NET Framework finden Sie unter Übersicht über Eigenschaften.

Behandeln von Ereignissen

Ein .NET-Client behandelt Ereignisse, die von einem COM-Server ausgelöst wurden, in gleicher Weise wie alle anderen verwalteten Ereignisse. Beim Importieren der Typbibliothek des Servers werden vom Konvertierungsprozess Delegate erstellt, die Sie mit dem Ereignishandler verknüpfen. Detaillierte Informationen zu diesem Prozess finden Sie unter Behandeln von Ereignissen, die durch eine COM-Quelle ausgelöst wurden.

COM-Objekte, die auf einem .NET-Client Ereignisse auslösen, werden erst nach zweimaliger Ausführung des Garbage Collectors (GC) freigegeben. Der Grund hierfür liegt im Verweiszyklus zwischen COM-Objekten und verwalteten Clients. Wenn ein COM-Objekt explizit freigegeben werden soll, rufen Sie die Collect-Methode zweimal auf.

Siehe auch

Aufgaben

Gewusst wie: Zuordnen von HRESULTs und Ausnahmen

Konzepte

Verwenden von COM-Typen in verwaltetem Code

Konvertieren importierter Member

Übersicht über Eigenschaften

COM-Interop-Beispiel: .NET-Client und COM-Server

Interop-Marshalling