XGameSaveGetContainerInfo
检索 XGameSaveProvider 中的容器信息。
语法
HRESULT XGameSaveGetContainerInfo(
XGameSaveProviderHandle provider,
const char* containerName,
void* context,
XGameSaveContainerInfoCallback* callback
)
参数
provider _In_
类型:XGameSaveProviderHandle
具有所需容器的 XGameSaveProvider 句柄。
containerName _In_z_
类型:char*
要检索有关信息的容器的名称;如果找到,将仅返回一个结果。 如果期望多个容器,则使用 XGameSaveEnumerateContainerInfo 或 XGameSaveEnumerateContainerInfoByName。
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
游戏保存错误