XGameSaveGetContainerInfo

检索 XGameSaveProvider 中的容器信息。

语法

HRESULT XGameSaveGetContainerInfo(  
         XGameSaveProviderHandle provider,  
         const char* containerName,  
         void* context,  
         XGameSaveContainerInfoCallback* callback  
)  

参数

provider _In_
类型:XGameSaveProviderHandle

具有所需容器的 XGameSaveProvider 句柄。

containerName _In_z_
类型:char*

要检索有关信息的容器的名称;如果找到,将仅返回一个结果。 如果期望多个容器,则使用 XGameSaveEnumerateContainerInfoXGameSaveEnumerateContainerInfoByName

context _In_opt_
类型:void*

指向上下文调用对象的指针。

callback _In_
类型:XGameSaveContainerInfoCallback*

用于确定 XGameSaveContainerInfo 调用的结果并收集来自该调用的数据的回调函数。

返回值

类型:HRESULT

函数结果

常见错误

  • E_GS_INVALID_CONTAINER_NAME
  • E_GS_USER_CANCELED
  • E_GS_CONTAINER_NOT_IN_SYNC
  • E_GS_CONTAINER_SYNC_FAILED
  • E_GS_HANDLE_EXPIRED

备注

注意

在时间敏感线程上调用此函数是不安全的。 有关详细信息,请参阅时间敏感线程

容器是元数据的集合以及其内 blob 集的参考点。 如果提前知道容器名称,就可以使用此 API 仅返回该容器的信息。 这可用于返回有关某一玩家的特定信息,而不是每次您需要信息时都要全部调用它们。 您可以在 XGameSaveContainerInfo 结构中查找 XGameSaveContainer 的构成形式。

void Sample::_GetContainerInfo(const char* name) 
{ 
    XGameSaveContainerInfoCallback* callback = [](_In_ const XGameSaveContainerInfo* info, _In_ void* ctx) -> bool 
    { 
        auto self = reinterpret_cast<Sample*>(ctx); 
        self->_UpdateContainerList(info); 
        return true; 
    }; 
  
    HRESULT hr = XGameSaveGetContainerInfo(_provider, name, this, callback); 
    if (FAILED(hr)) 
    { 
        _HandleContainerErrors(name, hr); 
    } 
} 
 
void Sample::_UpdateContainerList(const XGameSaveContainerInfo* container) 
{ 
    //update UX 
    printf("%s - %s: %I64dbytes %d blobs\n", container->name, container->displayName, container->totalSize, container->blobCount); 
    if (strcmp(container->name, "AutoSave") == 0) 
    { 
        _ReadContainerBlobsAsync(container); 
    } 
} 
 
void Sample::_HandleContainerErrors(const char* name, HRESULT hr) 
{ 
    switch (hr) 
    { 
    case E_GS_INVALID_CONTAINER_NAME: 
        printf("\'%s\' name is invalid for a container", name); 
        break; 
    case E_GS_USER_CANCELED: 
        printf("Container %s failed to sync user canceled hr=0x%08x\n", name, hr); 
        break; 
    case E_GS_CONTAINER_NOT_IN_SYNC: 
    case E_GS_CONTAINER_SYNC_FAILED: 
        printf("Container %s failed to sync hr=0x%08x\n", name, hr); 
        break; 
    case E_GS_HANDLE_EXPIRED: 
        printf("Container %s failed, re-initialize provider", name); 
        break; 
    case S_OK: 
        break; 
    default: 
        printf("Unknown Container error %s hr=0x%08X\n", name, hr); 
    } 
}

要求

头文件:XGameSave.h

库:xgameruntime.lib

支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机

另请参阅

XGameSave
XGameSaveCreateContainer
XGameSaveContainerInfo
游戏保存错误