IMarshal::GetUnmarshalClass
Returns the CLSID that should be used to create an uninitialized proxy on the
receiving side (that is, the side doing the unmarshaling). 
HRESULT IMarshal::GetUnmarshalClass(
| REFIID riid, 
 | //Identifies the interface being marshaled 
 | 
| void * pv, 
 | //Points to the interface pointer being marshaled 
 | 
| DWORD dwDestContext, 
 | //Identifies the destination process 
 | 
| void * pvDestContext, 
 | //Reserved for future use 
 | 
| DWORD mshlflags, 
 | //Specifies reason for marshaling 
 | 
| CLSID * pCid 
 | //Receives CLSID of proxy 
 | 
| ); 
 | 
 | 
Parameters
riid
[in]Specifies the IID of the interface pointer to be marshaled.
pv
[in]Points to the interface pointer to be marshaled; can be NULL.
dwDestContext
[in] Specifies the destination context, that is, the process in which the
unmarshaling will be done. Different marshaling can be done depending on whether
the unmarshaling will happen on the local workstation or on a workstation on the
network; it's possible for an object to do custom marshaling in one case but
not another. The legal values for 
dwDestContext are taken from the enumeration 
MSHCTX. For information on the 
MSHCTX enumeration, see the "Data Structures" section.
pvDestContext
[in] Reserved for use with future 
MSHCTX values.
mshlflags
[in] Specifies why marshaling is taking place. Values for 
mshlflags are taken from the enumeration 
MSHLFLAGS. For information on the 
MSHLFLAGS enumeration, see the "Data Structures" section.
pCid
[out] Receives the CLSID to be used to create a proxy on the receiving side
(that is, the side doing the unmarshaling).
Return Value
Returns S_OK if successful; otherwise, S_FALSE.
Comments
This method is called from the originating side (that is, the side doing the
marshaling). 
Notes to Implementors
The CLSID returned by this method identifies the class of the proxy object.
This CLSID is typically written to a stream on the originating side and then read
from the stream on the receiving side. Note that if you are creating a copy of
the original object in the client process (that is, you are implementing
custom marshaling for immutable objects), the CLSID returned is the same one as for
the original object.
Your implementation can delegate some destination contexts to the standard
marshaling implementation, available by calling the 
CoGetStandardMarshal API function. You should always delegate if the 
dwDestContext parameter contains a value that your implementation does not understand; this
allows new destination contexts to be defined in the future.
You may want your implementation to use the pointer passed through the 
pv parameter, and, based on information retrieved from that pointer, determine
the appropriate CLSID to return. If the 
pv parameter is NULL and your implementation needs that interface pointer, it
can call 
IUnknown::QueryInterface on the current object to get it. The 
pv parameter exists merely to improve efficiency.
			
				- Software for developers
				
- 
				Delphi Components
 .Net Components
 Software for Android Developers
- More information resources
				
- 
				MegaDetailed.Net
 Unix Manual Pages
 Delphi Examples