IMarshal::UnmarshalInterface 方法 (objidlbase.h)

取消对接口指针的封送。

语法

HRESULT UnmarshalInterface(
  [in]  IStream *pStm,
  [in]  REFIID  riid,
  [out] void    **ppv
);

参数

[in] pStm

指向要从中解封接口指针的流的指针。

[in] riid

对要取消封送的接口标识符的引用。

[out] ppv

接收接口指针的指针变量的地址。 成功返回后,*ppv 包含要取消封送的接口的请求接口指针。

返回值

此方法可以返回E_FAIL的标准返回值,以及以下值。

返回代码 说明
S_OK
已成功取消对接口指针的封送。
E_NOINTERFACE
不支持指定的接口。

注解

取消封送过程中的 COM 库调用代理对此方法的实现。

给调用方的说明

请勿直接调用此方法。 但是,在某些情况下,可以通过调用 CoUnmarshalInterface 间接调用它。 例如,如果要实现存根,则当存根接收接口指针作为方法调用中的参数时,实现将调用 CoUnmarshalInterface

实施者说明

代理的实现应读取原始对象的 IMarshal::MarshalInterface 实现写入流的数据,并使用该数据初始化代理对象,该代理对象的 CLSID 是通过封送存根对原始对象的 IMarshal::GetUnmarshalClass 实现的调用返回的。

若要返回适当的接口指针,代理实现只需在自身上调用 QueryInterface ,传递 riidppv 参数。 但是, UnmarshalInterface 的实现可以自由创建其他对象,并在必要时返回指向它的指针。

在退出之前,即使退出时出现错误,实现也应该在数据读取的最后一个字节之后立即在流中重新定位查找指针。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objidlbase.h (包括 ObjIdl.h)

另请参阅

CoUnmarshalInterface

IMarshal