CoGetStandardMarshal
Creates a
default, or standard, marshaling object in either the client process or the
server process, depending on the caller, and returns a pointer to that object s
IMarshal implementation.
STDAPI CoGetStandardMarshal(
REFIID riid, |
//Reference to the identifier of the interface |
IUnknown *
pUnk, |
//Pointer to the interface to be marshaled |
DWORD dwDestContext, |
//Destination process |
LPVOID pvDestContext, |
//Reserved for future use |
DWORD mshlflags, |
//Reason for marshaling |
LPMARSHAL
* ppMarshal |
//Indirect pointer to default IMarshal
implementation |
); |
|
Parameters
riid
[in]
Reference to the identifier of the interface whose pointer is to be marshaled.
This interface must be derived from the IUnknown
pUnk
[in] Pointer
to the interface to be marshaled.
dwDestContext
[in]
Destination context where the specified interface is to be unmarshaled. Values
for dwDestContext come from the enumeration MSHCTX
pvDestContext
[in] Reserved
for future use; must be NULL.
mshlflags
[in] Flag
indicating whether the data to be marshaled is to be transmitted back to the
client process the normal
case or written to a global table,
where it can be retrieved by multiple clients. Valid values come from the MSHLFLAGS
ppMarshal
[out]
Indirect pointer to the standard marshaler.
Return Values
This function
supports the standard return values E_FAIL,
E_OUTOFMEMORY and E_UNEXPECTED,
as well as the following:
S_OK
The IMarshal
CO_E_NOTINITIALIZED
The CoInitialize
Remarks
The CoGetStandardMarshal
function creates a default, or standard, marshaling object in either the client
process or the server process, as may be necessary, and returns that object s IMarshal
pointer to the caller. If you implement IMarshal, you may want your
implementation to call CoGetStandardMarshal as a way of delegating to
COM s default implementation any destination contexts that you don t fully
understand or want to handle. Otherwise, you can ignore this function, which
COM calls as part of its internal marshaling procedures.
When the COM
library in the client process receives a marshaled interface pointer, it looks
for a CLSID to be used in creating a proxy for the purposes of unmarshaling the
packet. If the packet does not contain a CLSID for the proxy, COM calls CoGetStandardMarshal,
passing a NULL pUnk value. This function creates a standard proxy in the
client process and returns a pointer to that proxy s implementation of IMarshal.
COM uses this pointer to call CoUnmarshalInterface to retrieve the
pointer to the requested interface.
If your OLE
server application s implementation of IMarshal calls CoGetStandardMarshal,
you should pass both the IID of (riid), and a pointer to (pUnk),
the interface being requested.
This function
performs the following tasks:
1. Determines whether
pUnk is NULL.
2. If pUnk
is NULL, creates a standard interface proxy in the client process for the
specified riid and returns the proxy s IMarshal pointer.
3. If pUnk
is not NULL, checks to see if a marshaler for the object already exists,
creates a new one if necessary, and returns the marshaler s IMarshal
pointer.
See Also