Regels voor geheugenbeheer
De levensduur van aanwijzers naar interfaces wordt altijd beheerd via de AddRef- en -methoden vrijgeven op elke COM-interface. Zie Regels voor het beheren van referentieaantallenvoor meer informatie.
Voor alle andere parameters is het belangrijk om te voldoen aan bepaalde regels voor het beheren van geheugen. De volgende regels zijn van toepassing op alle parameters van interfacemethoden,inclusief de retourwaardeâ€', die niet door de waarde worden doorgegeven:
- In-parameters moeten worden toegewezen en vrijgemaakt door de beller.
- Out-parameters moeten worden toegewezen door de parameter die wordt aangeroepen; ze worden vrijgemaakt door de beller met behulp van de standaard COM-taakgeheugentoewijzing. Zie De OLE-geheugentoewijzing voor meer informatie.
- In/out-parameters worden in eerste instantie toegewezen door de beller en vervolgens vrijgemaakt en opnieuw toegewezen door de aangeroepen, indien nodig. Zoals waar is voor outparameters, is de aanroeper verantwoordelijk voor het vrijmaken van de uiteindelijke geretourneerde waarde. De standaard COM-geheugentoewijzing moet worden gebruikt.
In de laatste twee gevallen, waarbij één stukje code het geheugen toewijst en een ander stuk code het vrij maakt, zorgt het gebruik van de COM-allocator ervoor dat de twee code-onderdelen dezelfde toewijzingsmethoden gebruiken.
Een ander gebied dat speciale aandacht nodig heeft, is de behandeling van out- en in-outparameters in foutomstandigheden. Als een functie een foutcode retourneert, heeft de aanroeper doorgaans geen manier om de out- of in-outparameters op te schonen. Dit leidt tot de volgende aanvullende regels:
- In het geval van een foutvoorwaarde moeten parameters altijd betrouwbaar worden ingesteld op een waarde die zonder actie door de aanroeper wordt opgeschoond.
- Alle aanwijzerparameters moeten expliciet worden ingesteld op NULL-. Deze worden meestal doorgegeven in een aanwijzer-naar-aanwijzerparameter, maar kunnen ook worden doorgegeven als leden van een structuur die de aanroeper toewijst en de aangeroepen codeopvullingen. De eenvoudigste manier om dit te controleren, is (gedeeltelijk) om deze waarden in te stellen op NULL- bij functievermelding. Deze regel is belangrijk omdat deze een krachtigere interoperabiliteit van toepassingen bevordert.
- Onder foutvoorwaarden moeten alle in-out parameters alleen worden gelaten door de code die wordt aangeroepen (dus blijvend op de waarde waarop ze door de aanroeper zijn geïnitialiseerd) of expliciet worden ingesteld, zoals in de fout-retourcase voor de outparameter.
Houd er rekening mee dat deze conventies voor geheugenbeheer voor COM-toepassingen alleen van toepassing zijn op openbare interfaces en API's; er is helemaal geen vereiste dat geheugentoewijzing strikt intern voor een COM-toepassing moet worden uitgevoerd met behulp van deze mechanismen.
COM maakt intern gebruik van Remote Procedure Calls (RPC) om te communiceren tussen clients en servers. Zie het onderwerp Server-stub Memory Management voor meer informatie over het beheren van geheugen in RPC-server-stub.