IOleLink::BindToSource 方法 (oleidl.h)

通过绑定链接对象中存储的名称对象来激活与链接源的连接。

语法

HRESULT BindToSource(
  [in] DWORD    bindflags,
  [in] IBindCtx *pbc
);

参数

[in] bindflags

指定如果链接源具有与上次绑定时不同的 CLSID,则如何继续操作。 如果此参数为零且 CLSID 不同,则 方法将失败并返回OLE_E_CLASSDIFF。 如果指定 了 OLELINKBIND 枚举中的OLELINKBIND_EVENIFCLASSDIFF值,并且 CLSID 不同,则 方法将成功绑定并更新存储在链接对象中的 CLSID。

[in] pbc

指向要在此绑定操作中使用的绑定上下文上的 IBindCtx 接口的指针。 此参数可以为 NULL。 绑定上下文缓存绑定过程中绑定的对象,包含应用于使用绑定上下文的所有操作的参数,并提供绑定实现应检索有关其环境的信息的方法。 有关详细信息,请参阅 IBindCtx

返回值

此方法在成功时返回S_OK。 其他可能的返回值包括以下内容。

返回代码 说明
OLE_E_CLASSDIFF
链接源未绑定,因为它的 CLSID 已更改。 仅当 bindflags 参数中未指定 OLELINKBIND_EVENIFCLASSDIFF 标志时,才会返回此错误。
MK_E_NOOBJECT
如果链接源的名字对象是复合) 找不到在复合中标识的某些中间对象,则找不到链接源或 (。
E_UNSPEC
链接的名称为 NULL
 

绑定名字对象可能需要调用 CreateBindCtx 函数;因此,此方法可能会返回 CreateBindCtx 生成的错误。

注解

给调用方的说明

通常,容器应用程序不需要直接调用 IOleLink::BindToSource 方法。 当需要激活与链接源的连接时,容器通常会调用 IOleObject::D oVerbIOleObject::UpdateIOleLink::Update。 链接对象的这些方法的实现调用 IOleLink::BindToSource。 容器还可以调用 OleRun 函数,该函数在对链接对象调用 时调用 IOleLink::BindToSource

在前面列出的每个间接调用 IOleLink::BindToSource 的示例中,bindflags 参数设置为零。 因此,如果链接源的类不同于上次绑定链接对象的类,这些调用可能会失败并出现OLE_E_CLASSDIFF错误。 例如,如果原始链接源是最终用户随后使用“更改类型”对话框) Excel 电子表格 (嵌入的 Lotus 电子表格,则可能会出现这种情况。

如果希望容器绑定,即使链接源现在具有不同的 CLSID,也可以直接调用 IOleLink::BindToSource 并为 bindflags 参数指定OLELINKBIND_EVENIFCLASSDIFF。 此调用绑定到链接源并更新链接对象的 CLSID。 或者,容器可以删除现有链接,并使用 OleCreateLink 函数创建新的链接对象。

实施者说明

链接对象缓存指向绑定期间获取的链接源的接口指针。

链接对象的 IOleLink::BindToSource 实现首先尝试使用由复合文档的名字对象组成的名字对象进行绑定,该名字对象由链接源的相对名字对象组成。 如果成功,它将更新链接的绝对名字对象。 否则,它会尝试使用绝对名字对象进行绑定,如果成功,则更新相对名字对象。

如果 IOleLink::BindToSource 绑定到链接源,它将调用复合文档的 IOleContainer::LockContainer 实现,以在链接源运行时使包含的复合文档保持活动状态。 IOleLink::BindToSource 还调用链接源的 IOleObject::AdviseIDataObject::D Advise 实现来设置咨询连接。 IOleLink::UnbindSource 实现可解锁容器并删除咨询连接。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 oleidl.h

另请参阅

IDataObject::D Advise

IOleContainer::LockContainer

IOleLink

IOleLink::UnbindSource

IOleLink::Update

IOleObject::Advise

IOleObject::D oVerb

IOleObject::Update

OleRun