c ++ - Registrering af implementering af en COM-grænseflade

Indlæg af Hanne Mølgaard Plasc

Problem

Jeg er ny til COM-programmering. Jeg har en COM-objekt (og tilhørende IClassFactory) klar til at gå, men jeg kan ikke helt regne ud, hvordan man går om at registrere den resulterende DLL til brug for andre programmer. GUID'er, jeg skal slynge rundt, er også uklart for mig. COM-objektet, jeg forsøger at registrere, implementerer IAudioSessionEvents-grænsefladen. Jeg har stødt på funktionerne DllRegisterServer og DllUnregisterServer, men jeg har ikke fundet nogen klare demonstrationer af deres brug. Hvilke nøgler handler de om, hvordan påberåbes de af hvad og hvornår osv.? Tak,
-Kevin Montrose

Bedste reference

Jeg er ikke sikker på fra dette indlæg, om du implementerer eller bruger DLL'en, der understøtter IAudioSessionEvents. Hvis du bruger denne DLL igen, kan du registrere komponenten ved hjælp af kommandolinjeværktøjet regsvr32. For at registrere brug: regsvr32 At afregistrere: regsvr32 / u regsvr32 skal være på din vej, så denne kommando vil fungere fra enhver mappe. Hvis du implementerer den pågældende DLL, skal du give en implementaion af funktionerne DllRegisterServer og DllUnRegisterServer. Disse funktioner skal oprette og rydde op registreringsposter til din komponent. Formålet med registreringsdatabasen er at give en ProgID, kortlæg den til en CLSID, og ​​giv grænseflade ID til de grænseflader, som komponenten understøtter. For eksempel interface-id'et til IAudioSessionEvent. Hvis du implementerer DLL'en, skal du give kode til at udføre alle disse opgaver. Bemærk: Disse funktioner kaldes af regsvr32 for at registrere komponenten. Hvis det er meget usædvanligt at faktisk skrive denne kode, vil du som regel gerne bruge en ramme som ATL, som tager sig af det travle arbejde for dig. Det er en god øvelse at skrive denne kode mindst en gang, hvis du virkelig vil vide COM fra grunden op.

Andre referencer 1

Du har brug for en GUID for hver klasse, du udsætter for COM og en GUID for hver ny grænseflade, du introducerer og ønsker at stille til rådighed via COM. DllRegisterServer / DllUnregister server kaldes, når du bruger regsvr32 utility (skibe med Windows) til at registrere dine COM-udsatte klasser. Det tilføjer / fjerner nøgler til HKCR / CLSID gren for hver klasse du udsætter til COM. Disse nøgler bruges af CoCreateInstance () for at finde ud af, hvilken DLL der skal indlæses for at skabe en forekomst af en klasse med en given GUID. Hvis du bruger ATL eller noget lignende, behøver du ikke helt at implementere DllRegisterServer / DllUnRegisterServer, men brug den implementering, der leveres sammen med biblioteket.

Andre referencer 2

Ofte er den nemmeste måde at gennemføre selvregistrering på at bruge ATL-serverklasserne, en global variabel, der stammer fra CComModule (eller en anden lignende klasse) og definere en COM\_MAP i dit modul. Du spørger derefter com-modulet til at håndtere registreringen baseret på de .rgs-filer, du har tilføjet til dit projekt.