CoReleaseMarshalData
Destroys a
previously marshaled data packet.
STDAPI CoReleaseMarshalData(
IStream * pStm |
//Pointer to stream containing data packet |
); |
|
Parameter
pStm
[in] Pointer
to the stream that contains the data packet to be destroyed.
Return Values
This
function supports the standard return values E_FAIL, E_INVALIDARG,
E_OUTOFMEMORY,
and E_UNEXPECTED, as well as the following:
S_OK
The data packet
was successfully destroyed.
STG_E_INVALIDPOINTER
An IStream
CO_E_NOTINITIALIZED
The CoInitialize
Remarks
The CoReleaseMarshalData
function performs the following tasks:
1. The function reads a CLSID from the stream.
2. If COM s default marshaling implementation is
being used, the function gets an IMarshal pointer to an instance of the standard
unmarshaler. If custom marshaling is being used, the function creates a proxy
by calling the CoCreateInstance function, passing the CLSID it read from the stream,
and requesings an IMarshal interface pointer to the newly created proxy.
3. Using whichever IMarshal interface
pointer it has acquired, the function calls IMarshal::ReleaseMarshalData .
You typically
do not call this function. The only situation in which you might need to call
this function is if you use custom marshaling (write and use your own
implementation of IMarshal). Examples of when CoReleaseMarshalData
should be called include the following situations:
An attempt was made to
unmarshal the data packet, but it failed.
A marshaled data packet was
removed from a global table.
As an
analogy, the data packet can be thought of as a reference to the original
object, just as if it were another interface pointer being held on the object.
Like a real interface pointer, that data packet must be released at some point.
The use of IMarshal::ReleaseMarshalData to release data packets is
analogous to the use of IUnknown::Release
Note that you
do not need to call CoReleaseMarshalData after a successful call of the CoUnmarshalInterface
See Also