Creates an aggregatable object capable of context-dependent marshaling.
HRESULT CoCreateFreeThreadedMarshaler(
LPUNKNOWN punkOuter, |
// Pointer to object aggregating the marshaler object |
LPUNKNOWN * ppunkMarshaler |
// Indirect pointer to the marshaler object |
); |
Parameters
Return Values
This function supports the standard return value E_OUTOFMEMORY, as well as the following:
Remarks
The CoCreateFreeThreadedMarshaler function enables an object to efficiently marshal interface pointers between threads in the same process. If your objects do not support interthread marshaling, you have no need to call this function.
The CoCreateFreeThreadedMarshaler function performs the following tasks:
The aggregating object's implementation of IMarshal should delegate QueryInterface calls for IID_IMarshal to the IUnknown of the free-threaded marshaler. Upon receiving a call, the free-threaded marshaler performs the following tasks:
Values for dwDestContext come from the MSHCTX enumeration. MSHCTX_INPROC indicates that the interface pointer is to be marshaled between different threads in the same process. Because both threads have access to the same address space, the client thread can dereference the pointer directly rather than having to direct calls to a proxy. In all other cases, a proxy is required, so CoCreateFreeThreadedMarshaler delegates the marshaling job to COM's default implementation.
See Also
CoMarshalInterThreadInterfaceInStream, CoGetInterfaceAndReleaseStream