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。 其他可能的返回值包括以下内容。
返回代码 | 说明 |
---|---|
|
链接源未绑定,因为它的 CLSID 已更改。 仅当 bindflags 参数中未指定 OLELINKBIND_EVENIFCLASSDIFF 标志时,才会返回此错误。 |
|
如果链接源的名字对象是复合) 找不到在复合中标识的某些中间对象,则找不到链接源或 (。 |
|
链接的名称为 NULL。 |
绑定名字对象可能需要调用 CreateBindCtx 函数;因此,此方法可能会返回 CreateBindCtx 生成的错误。
注解
给调用方的说明
通常,容器应用程序不需要直接调用 IOleLink::BindToSource 方法。 当需要激活与链接源的连接时,容器通常会调用 IOleObject::D oVerb、 IOleObject::Update 或 IOleLink::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::Advise 和 IDataObject::D Advise 实现来设置咨询连接。 IOleLink::UnbindSource 实现可解锁容器并删除咨询连接。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | oleidl.h |