FtmBase 类

表示自由线程封送拆收器对象。

语法

class FtmBase :
    public Microsoft::WRL::Implements<
        Microsoft::WRL::RuntimeClassFlags<WinRtClassicComMix>,
        Microsoft::WRL::CloakedIid<IMarshal>
    >;

备注

有关详细信息,请参阅 RuntimeClass 类

成员

公共构造函数

名称 描述
FtmBase::FtmBase 初始化 FtmBase 类的新实例。

公共方法

名称 描述
FtmBase::CreateGlobalInterfaceTable 创建全局接口表 (GIT)。
FtmBase::DisconnectObject 强制释放与对象的所有外部连接。 对象的服务器在关闭之前调用对象的此方法实现。
FtmBase::GetMarshalSizeMax 获取列表指定对象上的指定接口指针所需字节数的上限。
FtmBase::GetUnmarshalClass 获取 COM 用于定位包含相应代理代码的 DLL 的 CLSID。 COM 加载此 DLL 以创建代理的未初始化实例。
FtmBase::MarshalInterface 将在某些客户端进程中初始化代理对象所需的数据写入流。
FtmBase::ReleaseMarshalData 销毁封送数据包。
FtmBase::UnmarshalInterface 初始化新创建的代理并返回指向该代理的接口指针。

公共数据成员

“属性” 描述
FtmBase::marshaller_ 保存对自由线程封送拆收器的引用。

继承层次结构

FtmBase

要求

标头:ftm.h

命名空间: Microsoft::WRL

FtmBase::CreateGlobalInterfaceTable

创建全局接口表 (GIT)。

static HRESULT CreateGlobalInterfaceTable(
   __out IGlobalInterfaceTable **git
);

参数

git
此操作完成后,指向全局接口表的指针。

返回值

如果成功,则为 S_OK;否则为指示错误的 HRESULT。

备注

有关详细信息,请参阅 IGlobalInterfaceTable

FtmBase::DisconnectObject

强制释放与对象的所有外部连接。 对象的服务器在关闭之前调用对象的此方法实现。

STDMETHODIMP DisconnectObject(
   __in DWORD dwReserved
) override;

参数

dwReserved
留待将来使用;必须为零。

返回值

如果成功,则为 S_OK;否则为指示错误的 HRESULT。

FtmBase::FtmBase

初始化 FtmBase 类的新实例。

FtmBase();

FtmBase::GetMarshalSizeMax

获取列表指定对象上的指定接口指针所需字节数的上限。

STDMETHODIMP GetMarshalSizeMax(
   __in REFIID riid,
   __in_opt void *pv,
   __in DWORD dwDestContext,
   __reserved void *pvDestContext,
   __in DWORD mshlflags,
   __out DWORD *pSize
) override;

参数

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

pv
要封送的接口指针;可以为 NULL。

dwDestContext
要拆收指定接口的目标上下文。

指定一个或多个 MSHCTX 枚举值。

目前,拆收处理可以发生在当前进程 (MSHCTX_INPROC) 的另一个单元中,也可以发生在与当前进程 (MSHCTX_LOCAL) 相同计算机上的另一个进程中。

pvDestContext
保留供以后使用;必须是 NULL。

mshlflags
指示要封送的数据是否要传输回客户端进程(典型情况),或是否要写入全局表(多个客户端可以在其中检索数据)的标志。 指定一个或多个 MSHLFLAGS 枚举值。

pSize
此操作完成后,指向要写入封送处理流的数据量的上限的指针。

返回值

如果成功,返回值为 S_OK;否则,返回值为 E_FAIL 或 E_NOINTERFACE。

FtmBase::GetUnmarshalClass

获取 COM 用于定位包含相应代理代码的 DLL 的 CLSID。 COM 加载此 DLL 以创建代理的未初始化实例。

STDMETHODIMP GetUnmarshalClass(
   __in REFIID riid,
   __in_opt void *pv,
   __in DWORD dwDestContext,
   __reserved void *pvDestContext,
   __in DWORD mshlflags,
   __out CLSID *pCid
) override;

参数

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

pv
指向要封送的接口的指针;如果调用方没有指向所需接口的指针,可以是 NULL。

dwDestContext
要拆收指定接口的目标上下文。

指定一个或多个 MSHCTX 枚举值。

拆收处理可以发生在当前进程 (MSHCTX_INPROC) 的另一个单元中,也可以发生在与当前进程(MSHCTX_LOCAL) 相同计算机上的另一个进程中。

pvDestContext
保留供以后使用;必须是 NULL。

mshlflags
此操作完成后,指向用于在客户端进程中创建代理的 CLSID 的指针。

pCid

返回值

如果成功,返回值为 S_OK;否则返回值为 S_FALSE。

FtmBase::MarshalInterface

将在某些客户端进程中初始化代理对象所需的数据写入流。

STDMETHODIMP MarshalInterface(
   __in IStream *pStm,
   __in REFIID riid,
   __in_opt void *pv,
   __in DWORD dwDestContext,
   __reserved void *pvDestContext,
   __in DWORD mshlflags
) override;

参数

pStm
在封送处理期间要使用的流的指针。

riid
对要封送的接口的标识符的引用。 此接口必须派生自 IUnknown 接口。

pv
指向要封送的接口指针的指针;如果调用方没有指向所需接口的指针,可以是 NULL。

dwDestContext
要拆收指定接口的目标上下文。

指定一个或多个 MSHCTX 枚举值。

拆收处理可以发生在当前进程 (MSHCTX_INPROC) 的另一个单元中,或者可以发生在与当前进程(MSHCTX_LOCAL) 相同计算机上的另一个进程中。

pvDestContext
留待将来使用;必须为零。

mshlflags
指定要封送的数据是否要传输回客户端进程(典型情况),或是否写入全局表(多个客户端可以在其中检索数据)。

返回值

S_OK 接口指针封送成功。

E_NOINTERFACE 不支持指定接口。

STG_E_MEDIUMFULL 流已满。

E_FAIL 操作失败。

FtmBase::marshaller_

保存对自由线程封送拆收器的引用。

Microsoft::WRL::ComPtr<IMarshal> marshaller_; ;

FtmBase::ReleaseMarshalData

销毁封送数据包。

STDMETHODIMP ReleaseMarshalData(
   __in IStream *pStm
) override;

参数

pStm
指向包含要销毁的数据包的流的指针。

返回值

如果成功,则为 S_OK;否则为指示错误的 HRESULT。

FtmBase::UnmarshalInterface

初始化新创建的代理并返回指向该代理的接口指针。

STDMETHODIMP UnmarshalInterface(
   __in IStream *pStm,
   __in REFIID riid,
   __deref_out void **ppv
) override;

参数

pStm
指向要拆收接口指针的流的指针。

riid
对要拆收的接口的标识符的引用。

ppv
此操作完成后,接收“riid”中请求的接口指针的指针变量地址。 如果此操作成功,*“ppv”包含要拆收的接口的请求接口指针

返回值

如果成功,返回值为 S_OK;否则,返回值为 E_NOINTERFACE 或 E_FAIL。