coUnmarshalInterface 函数 (combaseapi.h)
使用先前调用 CoMarshalInterface 函数写入流的数据初始化新创建的代理,并返回指向该代理的接口指针。
语法
HRESULT CoUnmarshalInterface(
[in] LPSTREAM pStm,
[in] REFIID riid,
[out] LPVOID *ppv
);
参数
[in] pStm
指向要从中取消封送接口的流的指针。
[in] riid
对要取消封送的接口标识符的引用。 对于 IID_NULL,返回的接口是由流 objref.iid 定义的接口。
[out] ppv
接收 riid 中请求的接口指针的指针变量的地址。 成功返回后,*ppv 包含未封送接口的请求接口指针。
返回值
此函数可以返回标准返回值E_FAIL、 CoCreateInstance 返回的错误以及以下值。
返回代码 | 说明 |
---|---|
|
已成功取消对接口指针的封送。 |
|
pStm 是无效的指针。 |
|
在调用此函数之前,未在当前线程上调用 CoInitialize 或 OleInitialize 函数。 |
|
例如,由于调用 CoDisconnectObject 函数) ,对象应用程序已与远程处理系统断开连接 (。 |
|
读取注册数据库时出错。 |
|
请求的接口的此函数的最终 QueryInterface 返回E_NOINTERFACE。 |
注解
重要说明
安全说明:使用不受信任的数据调用此方法存在安全风险。 仅使用受信任的数据调用此方法。
- 从流中读取用于创建代理实例的 CLSID。
- 获取一个 IMarshal 指针,该指针指向要执行取消封送的代理。 如果对象使用 COM 的默认封送处理实现,则获取的指针指向泛型代理对象的实例。 如果封送处理发生在同一进程中的两个线程之间,则指针指向进程内自由线程封送处理程序的实例。 如果对象提供其自己的封送代码, CoUnmarshalInterface 将调用 CoCreateInstance 函数,传递它从封送处理流中读取的 CLSID。 CoCreateInstance 创建对象的代理实例,并返回指向代理的 IMarshal 接口指针。
- 使用该函数获取的 IMarshal 接口指针,然后调用 IMarshal::UnmarshalInterface ,如果适用, 则调用 IMarshal::ReleaseMarshalData。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 专业版 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | combaseapi.h (包括 Objbase.h) |
Library | Ole32.lib |
DLL | Ole32.dll |