Delen via


Een aanwijzer naar een object ophalen

Omdat COM geen strikt klassemodel heeft, zijn er vier manieren waarop een client een instantie kan maken of een aanwijzer naar een interface op een object kan krijgen:

  • Roep een COM-bibliotheekfunctie aan waarmee een object van een vooraf bepaald type wordt gemaakt; Dat wil gezegd, de functie retourneert een aanwijzer naar slechts één specifieke interface voor een specifieke objectklasse.
  • Roep een COM-bibliotheekfunctie aan die een object kan maken op basis van een klasse-id (CLSID) en die elk type interfaceaanwijzer retourneert dat wordt aangevraagd.
  • Roep een methode aan van een bepaalde interface die een ander object maakt (of verbinding maakt met een bestaand object) en retourneert een interfaceaanwijzer op dat afzonderlijke object.
  • Implementeer een object met een interface waarmee andere objecten de interfaceaanwijzer rechtstreeks aan de client doorgeven.

Zie QueryInterface: Navigeren in een objectvoor informatie over het verkrijgen van aanwijzers naar andere interfaces op een object nadat u toegang hebt tot de eerste.

Een object van een vooraf bepaald type maken

Er zijn talloze COM-functies, zoals CoGetMalloc, die pointers retourneren naar specifieke interface-implementaties. (CoGetMalloc haalt een aanwijzer op naar de standaard COM-geheugentoewijzing.) De meeste van deze functies zijn helperfuncties en de meeste van deze functies worden beschreven in de naslagsecties van deze documentatie, onder het specifieke gebied waaraan ze zijn gerelateerd, zoals opslag of gegevensoverdracht.

Een object maken op basis van een CLSID

Er zijn verschillende functies die, gegeven een CLSID, een client kan aanroepen om een objectexemplaar te maken en een verwijzing ernaar te krijgen. Al deze functies zijn gebaseerd op de functie CoGetClassObject, waarmee een klasseobject wordt gemaakt en een aanwijzer wordt geleverd op een interface waarmee u exemplaren van die klasse kunt maken. Hoewel er informatie moet zijn die aangeeft op welk systeem de server zich bevindt, is het niet nodig dat die informatie in de client is opgenomen. De client moet alleen de CLSID kennen en nooit het absolute pad van de servercode. Zie Een object maken via een klasseobjectvoor meer informatie.

Een aanwijzer retourneren naar een afzonderlijk object

Een van de vele interfacemethoden die een aanwijzer naar een afzonderlijk object retourneren, zijn verschillende methoden waarmee een aanwijzer wordt gemaakt en geretourneerd naar een enumerator-object, waarmee u kunt bepalen hoeveel items van een bepaald type een object onderhoudt. COM definieert interfaces voor het inventariseren van een groot aantal items, zoals tekenreeksen, belangrijke structuren, monikers en IUnknown interfacepointers. De gebruikelijke manier om een enumerator-exemplaar te maken en een aanwijzer op te halen naar de interface, is door een methode aan te roepen vanuit een andere interface. De interface IDataObject definieert bijvoorbeeld twee methoden, EnumDAdvise- en EnumFormatEtc-, waarmee aanwijzers worden geretourneerd naar interfaces op twee verschillende opsommingsobjecten. Er zijn veel andere voorbeelden in COM van methoden die aanwijzers retourneren naar objecten, zoals de OLE-samengestelde documentinterface IOleObject::GetClientSite, die, wanneer het ingesloten of gekoppelde object wordt aangeroepen, een aanwijzer retourneert naar de implementatie van IOleClientSite.

Een object implementeren waarmee een interfaceaanwijzer rechtstreeks aan de client moet worden doorgegeven

Wanneer twee objecten, zoals een OLE-samengestelde documentcontainer en server, bidirectionele communicatie nodig hebben, implementeert elk een object met een interfacemethode waarmee een interfaceaanwijzer aan het andere object kan worden doorgegeven. Het implementatieobject, dat ook de client van het gemaakte object is, kan vervolgens de methode aanroepen en de aanwijzer ophalen die is doorgegeven.

COM-clients en -servers

COM-serververantwoordelijkheden