Share via


Chiamata di metodi, proprietà ed eventi

Un client .NET può chiamare metodi di un oggetto COM attivo, impostare le relative proprietà e intercettare eventi originatisi sul server. I metodi e le proprietà che appaiono come esempi di codice in questa sezione sono esposti dalla coclasse Loan (C++ non gestito, ATL).

Chiamata di metodi

Chiamare metodi di un oggetto COM da codice gestito è esattamente come chiamare metodi di un oggetto gestito. Poiché i componenti COM espongono sempre le proprie funzionalità tramite un'interfaccia, è possibile scegliere se chiamare i metodi sull'interfaccia o direttamente sulla coclasse COM. Una coclasse espone solo i membri esposti dalla propria interfaccia predefinita. Nel seguente esempio di codice viene chiamato il metodo GetFirstPmtDistribution direttamente sulla coclasse importata:

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

L'interoperabilità COM effettua il marshalling dei tipi di dati. Se ad esempio si passa il tipo System.String a un oggetto COM, l'interoperabilità COM converte il tipo in BSTR.

I parametri contrassegnati come [out retval] in una libreria dei tipi vengono convertiti in valori restituiti del metodo. Il processo di conversione rimuove tali parametri dalla firma gestita. In base all'impostazione predefinita, il runtime genera un'eccezione al codice gestito, associando il codice HRESULT di errore a un'eccezione gestita equivalente.

Lettura e impostazione delle proprietà

Le interfacce COM possono includere proprietà come membri di interfaccia. Le proprietà esposte da un oggetto COM possono essere lette e impostate allo stesso modo di quelle esposte da una classe gestita. Le interfacce e le coclassi COM importate come metadati in un assembly espongono proprietà e metodi di accesso per ciascuna proprietà. Nel seguente codice di esempio viene impostata la proprietà OpeningBalance:

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

Per informazioni dettagliate sulla conversione delle proprietà, vedere Conversione dei membri importati. Per una descrizione più generale delle proprietà in .NET Framework, vedere Cenni preliminari sulle proprietà.

Gestione degli eventi

Un client .NET può gestire gli eventi generati da un server COM alla stessa maniera di qualunque altro evento gestito. Quando si importa la libreria dei tipi del server, il processo di conversione crea delegati che vanno collegati ai propri gestori evento. Per informazioni dettagliate su questo processo, vedere Gestione degli eventi generati da un'origine COM.

Si noti che gli oggetti COM che generano eventi all'interno di un client .NET richiedono due Garbage Collector prima del rilascio, a causa del ciclo di riferimenti che si crea tra oggetti COM e client gestiti. Se occorre rilasciare in modo esplicito un oggetto COM, è necessario chiamare il metodo Collect due volte.

Vedere anche

Attività

Procedura: eseguire il mapping di HRESULT ed eccezioni

Concetti

Utilizzo di tipi COM nel codice gestito

Conversione dei membri importati

Cenni preliminari sulle proprietà

Esempio di interoperabilità COM: client .NET e server COM

Marshalling di interoperabilità