IXpsOMPageReference::CollectLinkTargets 方法 (xpsobjectmodel.h)

获取一个 IXpsOMNameCollection 接口,该接口包含其 IsHyperlinkTarget 属性设置为 TRUE 的所有文档子树对象的名称。

语法

HRESULT CollectLinkTargets(
  [out, retval] IXpsOMNameCollection **linkTargets
);

参数

[out, retval] linkTargets

指向 IXpsOMNameCollection 接口的指针,该接口包含其 IsHyperlinkTarget 属性设置为 TRUE 的所有文档子树对象的名称。 如果文档中不存在此类对象, 则 IXpsOMNameCollection 接口将为空。

注意 每次调用此方法时,它都会返回一个新集合。
 

返回值

如果 方法成功,则返回S_OK;否则,它将返回 HRESULT 错误代码。

返回代码 说明
S_OK
方法成功。
E_OUTOFMEMORY
内存不足,无法执行此操作。
E_POINTER
linkTargetsNULL

注解

如果页面最初是从包加载的,但当前未加载到对象模型中,此方法将返回原始 PageContent.LinkTargets 标记中指定的值。

如果文档没有任何链接目标,则 linkTargets 中返回的名称集合将为空。

若要获取 集合中 linkTargets 中返回的元素数,请调用集合的 GetCount 方法。

每次调用新集合时,此方法都会返回指向该集合的指针。 若要防止内存泄漏,应释放指向上一个集合的指针,当不再需要该指针时,或者在对此方法的另一次调用重复使用指针变量之前释放该指针。 下面的代码示例演示如何在程序中执行此操作。

    HRESULT                         hr = S_OK;
    IXpsOMPage                      *page = NULL;
    IXpsOMNameCollection            *linkTargets = NULL;

    UINT32 numTargets = 0;
    UINT32 thisTarget = 0;
    LPWSTR thisTargetName = NULL;

    // pageRef contains the current page reference 

    // if the page hasn't been loaded yet, for example, if the XPS OM 
    //  was loaded from an XPS document, CollectLinkTargets obtains the
    //  list of link targets from the <PageContent.LinkTargets> markup
    hr = pageRef->CollectLinkTargets(&linkTargets);

    // get the page content of this page reference
    hr = pageRef->GetPage (&page);

    // after the page object has been loaded and calling GetPage or 
    //  by creating a page in the XPS OM, CollectLinkTargets will now check
    //  each of the page elements to return the list so this call to
    //  CollectLinkTargets might take longer to return than the previous
    //  call above if the XPS OM was created from a file
    linkTargets->Release(); // release previous collection
    hr = pageRef->CollectLinkTargets(&linkTargets);
    
    // walk the list of link targets returned
    hr = linkTargets->GetCount( &numTargets );
    thisTarget = 0;
    while (thisTarget < numTargets) {
        hr = linkTargets->GetAt (thisTarget, &thisTargetName);
        printf ("%s\n", thisTargetName);
        // release the target string returned to prevent memory leaks
        CoTaskMemFree (thisTargetName);
        // get next target in list
        thisTarget++;
    }
    // release page and the link target collection
    page->Release();
    linkTargets->Release();

要求

要求
最低受支持的客户端 Windows 7、带 SP2 的 Windows Vista 和适用于 Windows Vista 的平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008 R2、Windows Server 2008 SP2 和适用于 Windows Server 2008 的平台更新 [桌面应用 |UWP 应用]
目标平台 Windows
标头 xpsobjectmodel.h

另请参阅

IXpsOMNameCollection

IXpsOMPageReference

XML 纸张规范