SetService method

Adds a service provider to the Transform Factory.

Syntax

HRESULT retVal = object.SetService(guidService, pUnkService, bWeakReference);

Parameters

  • guidService [in]
    Type: REFGUID

    GUID used to identify the service.

  • pUnkService [in]
    Type: IUnknown

    Pointer to a service provider interface.

  • bWeakReference [in]
    Type: BOOL

    Flag that indicates whether the reference to the service provider object should be a weak reference. If TRUE, the reference is weak; otherwise, the reference is strong. A strong reference causes the factory to reference count the service. A weak reference should be requested where there is potential for cyclic dependencies. See Remarks for more information.

Remarks

To remove the service specified by guidService, set the pUnkService parameter to NULL.

A strong reference —also called a lock— keeps an object active and running. As long as a strong reference to an object exists, the object should not shut down. A weak reference does not prevent an object from shutting down. For example, if a client is using a child process, its parent must stay running because the child cannot exist independent of the parent. When there is a strong reference on the child, the child holds a strong reference on the parent. But if a client is not using the child, the simple existence of the child should not keep the parent active.

In a normal state, the parent should hold a weak reference on the child. Thus, when all clients release the child, the child shuts down because there are no other strong references. This is usually handled by maintaining a lock count on the object separate from the reference count. When the lock count is zero, the object attempts to also make its reference count zero, for example, by sending a close notification and disconnecting all external connections.