XStoreQueryPackageUpdatesAsync
检索参数中指定的包的可用更新列表,这些包随后可用于下载和安装这些更新。
语法
HRESULT XStoreQueryPackageUpdatesAsync (
const XStoreContextHandle storeContextHandle,
const char** packageIdentifiers,
size_t packageIdentifiersCount,
XAsyncBlock* async
)
参数
storeContextHandle _In_
类型:XStoreContextHandle
XStoreCreateContext 返回的用户的应用商店上下文句柄。
packageIdentifiers _In_z_count_(packageIdentifiersCount)
类型:char**
程序包标识符字符串的列表。 包标识符唯一标识 Microsoft Store 中的包。 有关包标识符的详细信息,请参阅管理和许可可下载内容 (DLC)。
packageIdentifiersCount _In_
类型:size_t
packageIdentifiers 中的标识符数。
async _Inout_
类型:XAsyncBlock*
用于定义正在进行的异步工作的 XAsyncBlock。 XAsyncBlock 可用于轮询调用的状态和检索调用结果。 有关详细信息,请参阅 XAsyncBlock。
返回值
类型:HRESULT
HRESULT 成功或错误代码。
备注
若要检索可用更新的列表以及此函数的执行结果,在调用此函数后调用 XStoreQueryPackageUpdatesResult 。 若要获取要检索的更新数,调用 XStoreQueryPackageUpdatesResultCount 后调用此函数。 结果计数函数很重要,因为它让您可以确定要传递给结果函数的数组的适当大小。
以下代码片段演示了检索指定包的游戏和可选更新的示例。
void CALLBACK QueryPackageUpdatesCallback(XAsyncBlock* asyncBlock)
{
uint32_t count;
HRESULT hr = XStoreQueryPackageUpdatesResultCount(
asyncBlock,
&count);
if (FAILED(hr))
{
printf("XStoreQueryPackageUpdatesResultCount failed : 0x%x\n", hr);
return;
}
printf("Number of updates: %d", count);
if (count > 0)
{
XStorePackageUpdate* updates = new XStorePackageUpdate[count];
hr = XStoreQueryPackageUpdatesResult(
asyncBlock,
count,
updates);
if (FAILED(hr))
{
delete[] updates;
printf("XStoreQueryPackageUpdatesResult failed: 0x%x\n", hr);
return;
}
for (uint32_t index = 0; index < count; index++)
{
printf("Update found for packageIdentifier: %s\n", updates[index].packageIdentifier);
// Proceed to XStoreDownloadAndInstallPackageUpdates flow
}
delete[] updates;
}
}
void QueryPackageUpdates(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle)
{
std::vector<std::string> packageIds;
HRESULT hr = XPackageEnumeratePackages(
XPackageKind::Game,
XPackageEnumerationScope::ThisAndRelated,
&packageIds, [](void* context, const XPackageDetails* details) -> bool
{
auto packageIds = reinterpret_cast<std::vector<std::string>*>(context);
printf("Identifier: %s name: %s\n", details->packageIdentifier, details->displayName);
packageIds->push_back(details->packageIdentifier);
});
// packageIds now populated with ids for all installed packages
auto asyncBlock = new XAsyncBlock();
asyncBlock->queue = m_asyncQueue;
asyncBlock->callback = QueryPackageUpdatesCallback;
hr = XStoreQueryPackageUpdatesAsync(
m_storeContext,
packageIds.data(),
packageIds.size(),
asyncBlock);
if (FAILED(hr))
{
printf("XStoreQueryPackageUpdatesAsync failed: 0x%x\n", hr);
return;
}
}
要求
头文件:XStore.h(包含在 XGameRuntime.h 中)
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机
另请参阅
XStore
XStoreQueryPackageUpdatesResult
XStoreQueryPackageUpdatesResultCount