MSHLFLAGS 枚举 (wtypesbase.h)

指定执行封送处理的原因。

语法

typedef enum tagMSHLFLAGS {
  MSHLFLAGS_NORMAL = 0,
  MSHLFLAGS_TABLESTRONG = 1,
  MSHLFLAGS_TABLEWEAK = 2,
  MSHLFLAGS_NOPING = 4,
  MSHLFLAGS_RESERVED1 = 8,
  MSHLFLAGS_RESERVED2 = 16,
  MSHLFLAGS_RESERVED3 = 32,
  MSHLFLAGS_RESERVED4 = 64
} MSHLFLAGS;

常量

 
MSHLFLAGS_NORMAL
值: 0
发生封送处理是因为接口指针从一个进程传递到另一个进程。 这是正常情况。 封送处理过程生成的数据包将在目标进程中取消封送。 封送数据包只能取消封送一次,也可以完全取消封送。 如果接收方成功取消数据包的封存,则作为取消封送过程的一部分,会自动对数据包调用 CoReleaseMarshalData 函数。 如果接收方未或无法取消数据包的封存,则发送方必须对数据包调用 CoReleaseMarshalData
MSHLFLAGS_TABLESTRONG
值:1
之所以发生封送处理,是因为数据包将存储在全局可访问的表中,该表可以从该表中取消封送一次或多次,或者根本不可以取消封送。 表中是否存在数据包算作对要封送的接口的强引用,这意味着足以使对象保持活动状态。 从表中删除数据包时,表实现者必须对数据包调用 CoReleaseMarshalData 函数。

MSHLFLAGS_TABLESTRONG由 RegisterDragDrop 函数在将窗口注册为放置目标时使用。 无论最终用户在窗口中拖动多少次,这都会使窗口注册为放置目标。 RevokeDragDrop 函数调用 CoReleaseMarshalData
MSHLFLAGS_TABLEWEAK
值: 2
之所以发生封送处理,是因为数据包将存储在全局可访问的表中,该表可以从该表中取消封送一次或多次,或者根本不可以取消封送。 但是,表中存在的数据包充当对要封送的接口的弱引用,这意味着不足以使对象保持活动状态。 从表中删除数据包时,表实现者必须对数据包调用 CoReleaseMarshalData 函数。

MSHLFLAGS_TABLEWEAK通常在运行的对象表中注册对象 (ROT) 时使用。 这可以防止 ROT 中的对象条目在没有任何其他连接的情况下使对象保持活动状态。 有关详细信息 ,请参阅 IRunningObjectTable::Register
MSHLFLAGS_NOPING
值: 4
将此标志添加到原始对象封送处理 (而不是封送代理) 将禁用该对象的 ping 协议。
MSHLFLAGS_RESERVED1
值: 8
MSHLFLAGS_RESERVED2
值: 16
MSHLFLAGS_RESERVED3
值: 32
MSHLFLAGS_RESERVED4
值: 64

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 wtypesbase.h (包括 WTypes.h)

另请参阅

CoGetStandardMarshal

CoMarshalInterface

ICallFrame

IMarshal