Dela via


Hämta en pekare till ett objekt

Eftersom COM inte har någon strikt klassmodell finns det fyra sätt som en klient kan instansiera eller hämta en pekare till ett gränssnitt på ett objekt:

  • Anropa en COM-biblioteksfunktion som skapar ett objekt av en fördefinierad typ. Funktionen returnerar alltså bara en pekare till ett specifikt gränssnitt för en specifik objektklass.
  • Anropa en COM-biblioteksfunktion som kan skapa ett objekt baserat på en klassidentifierare (CLSID) och som returnerar alla typer av gränssnittspekare som begärs.
  • Anropa en metod för något gränssnitt som skapar ett annat objekt (eller ansluter till ett befintligt) och returnerar en gränssnittspekare för det separata objektet.
  • Implementera ett objekt med ett gränssnitt genom vilket andra objekt skickar sin gränssnittspekare direkt till klienten.

Information om hur du hämtar pekare till andra gränssnitt på ett objekt när du har den första finns i QueryInterface: Navigera i ett objekt.

Skapa ett objekt av en fördefinierad typ

Det finns många COM-funktioner, till exempel CoGetMalloc, som returnerar pekare till specifika gränssnittsimplementeringar. (CoGetMalloc hämtar en pekare till com-standard-minnesallokeraren.) De flesta av dessa är hjälpfunktioner, och de flesta av dessa funktioner beskrivs i referensavsnitten i den här dokumentationen, under det specifika område som de är relaterade till, till exempel lagring eller dataöverföring.

Skapa ett objekt baserat på ett CLSID

Det finns flera funktioner som en klient med ett CLSID kan anropa för att skapa en objektinstans och få en pekare till den. Alla dessa funktioner baseras på funktionen CoGetClassObject, som skapar ett klassobjekt och ger en pekare till ett gränssnitt som gör att du kan skapa instanser av den klassen. Det måste finnas information om vilket system servern finns på, men det finns inget behov av att den informationen finns i klienten. Klienten behöver bara känna till CLSID och aldrig den absoluta sökvägen till serverkoden. Mer information finns i Skapa ett objekt via ett klassobjekt.

Returnera en pekare till ett separat objekt

Bland de många gränssnittsmetoder som returnerar en pekare till ett separat objekt finns flera som skapar och returnerar en pekare till ett uppräkningsobjekt, vilket gör att du kan avgöra hur många objekt av en viss typ ett objekt underhåller. COM definierar gränssnitt för att räkna upp en mängd olika objekt, till exempel strängar, viktiga strukturer, monikers och IUnknown gränssnittspekare. Det vanliga sättet att skapa en uppräkningsinstans och få en pekare till dess gränssnitt är att anropa en metod från ett annat gränssnitt. Gränssnittet IDataObject definierar till exempel två metoder, EnumDAdvise och EnumFormatEtc, som returnerar pekare till gränssnitt på två olika uppräkningsobjekt. Det finns många andra exempel i COM med metoder som returnerar pekare till objekt, till exempel ole-sammansatta dokumentgränssnittet IOleObject::GetClientSite, som när det anropas på det inbäddade eller länkade objektet returnerar en pekare till containerobjektets implementering av IOleClientSite.

Implementera ett objekt genom vilket du skickar en gränssnittspekare direkt till klienten

När två objekt, till exempel en OLE-sammansatt dokumentcontainer och server, behöver dubbelriktad kommunikation implementerar var och en ett objekt som innehåller en gränssnittsmetod genom vilken den kan skicka en gränssnittspekare till det andra objektet. Implementeringsobjektet, som också är klienten för det skapade objektet, kan sedan anropa metoden och hämta pekaren som skickades.

COM-klienter och -servrar

COM-serveransvarigheter