Gebeurtenissen in COM- en connectable-objecten
Wanneer een programma iets detecteert dat er is gebeurd, kan het de clients hiervan op de hoogte stellen. Als een aandelen ticker-programma bijvoorbeeld een wijziging in de prijs van een aandeel detecteert, kan het alle klanten op de hoogte stellen van de wijziging. Dit meldingsproces wordt aangeduid als het activeren van een gebeurtenis.
Met COM kunnen serverobjecten COM-gebeurtenissen gebruiken om gebeurtenissen te activeren zonder informatie over welke objecten worden gewaarschuwd. Objecten kunnen ook koppelbare objecten gebruiken om gedetailleerde informatie te onderhouden over clients die meldingen hebben aangevraagd.
COM-verbindingsobjecten bieden uitgaande interfaces aan hun clients, naast hun binnenkomende interfaces. Als gevolg hiervan kunnen objecten en hun clients in twee richtingen communiceren. Binnenkomende interfaces worden geïmplementeerd op een object en ontvangen aanroepen van externe clients van een object, terwijl uitgaande interfaces worden geïmplementeerd op de sink van de client en oproepen ontvangen van het object. Het object definieert een interface die het wil gebruiken en de client implementeert het.
Een object definieert de binnenkomende interfaces en biedt implementaties van deze interfaces. Binnenkomende interfaces zijn beschikbaar voor clients via de methode IUnknown::QueryInterface methode. Clients roepen de methoden van een binnenkomende interface op het object aan en het object voert de gewenste acties uit namens de client.
Uitgaande interfaces worden ook gedefinieerd door een object, maar de client biedt de implementaties van de uitgaande interfaces op een sink-object dat door de client wordt gemaakt. Het object roept vervolgens methoden aan van de uitgaande interface op het sink-object om de client op de hoogte te stellen van wijzigingen in het object, gebeurtenissen in de client te activeren, iets aan te vragen van de client, of, in feite, voor welk doel de maker van het object komt.
Een voorbeeld van een uitgaande interface is een IButtonSink-interface die is gedefinieerd door een drukknopbesturing om de clients op de hoogte te stellen van de gebeurtenissen. Het knopobject roept bijvoorbeeld IButtonSink::OnClick aan op het sinkobject van de client wanneer de gebruiker op de knop op het scherm klikt. Het knop besturingselement definieert de uitgaande interface. Voor een client van de knop om de gebeurtenis af te handelen, moet de client die uitgaande interface op een sinkobject implementeren en die sink vervolgens verbinden met het knopbeheer. Wanneer er vervolgens gebeurtenissen plaatsvinden in de knop, roept de knop de sink aan, waarna de client elke actie kan uitvoeren die aan die knop moet worden toegewezen.
Koppelbare objecten bieden een algemeen mechanisme voor object-naar-client-communicatie. Elk object dat gebeurtenissen of meldingen van elk type beschikbaar wil maken, kan deze technologie gebruiken. Naast de algemene verbindingsbare objecttechnologie biedt COM veel speciale sink- en site-interfaces die door objecten worden gebruikt om clients op de hoogte te stellen van specifieke gebeurtenissen die van belang zijn voor de client. IAdviseSink- kan bijvoorbeeld worden gebruikt door objecten om clients op de hoogte te stellen van gegevens en wijzigingen in het object te bekijken.
Zie de volgende onderwerpen voor meer informatie: