PropVariantToBuffer 函数 (propvarutil.h)

从类型为 VT_VECTOR 的 PROPVARIANT 结构中提取缓冲区值 |VT_UI1或VT_ARRRAY |VT_UI1。

语法

PSSTDAPI PropVariantToBuffer(
  [in]  REFPROPVARIANT propvar,
  [out] void           *pv,
  [in]  UINT           cb
);

参数

[in] propvar

类型: REFPROPVARIANT

PROPVARIANT 结构。

[out] pv

类型: VOID*

指向长度 为 cb 字节的缓冲区的指针。 当此函数返回时,包含提取的缓冲区值的第一 个 cb 字节。

[in] cb

类型: UINT

缓冲区长度(以字节为单位)。

返回值

类型: HRESULT

此函数可以返回其中一个值。

返回代码 说明
S_OK
如果成功,则为 ;否则为错误值。
E_INVALIDARG
PROPVARIANT 的类型不正确。
E_FAIL
PROPVARIANT 值的字节少于 cb 字节。

注解

此函数用于调用应用程序要求PROPVARIANT 保存缓冲区值的位置。 调用应用程序应在调用此函数之前检查该值具有预期的长度。

如果源 PROPVARIANT 具有类型VT_VECTOR |VT_UI1或VT_ARRAY |VT_UI1,此函数从 值中提取第 一个 cb 字节,并将其放置在 pv 指向的缓冲区中。 如果该值的字节少于 cb 字节,则 PropVariantToBuffer 将失败,并且不会修改缓冲区。 如果值超过 cb 字节,则 PropVariantToBuffer 成功并截断该值。

示例

以下示例将作为更大的程序的一部分包含,演示如何使用 PropVariantToBuffer 访问已存储在 PROPVARIANT 中的结构。

// IPropertyStore *ppropstore;
// Assume variable ppropstore is initialized and valid
PROPVARIANT propvar = {0};
HRESULT hr = ppropstore->GetValue(PKEY_FindData, &propvar);

if (SUCCEEDED(hr))
{
    // PKEY_FindData is expected to produce a VT_VECTOR | VT_UI1 with sizeof(WIN32_FIND_DATAW) bytes
    // We need to verify that the value length is acceptable before calling PropVariantToBuffer
    hr = E_UNEXPECTED;
    
    if (PropVariantGetElementCount(propvar) == sizeof(WIN32_FIND_DATAW))
    {
        WIN32_FIND_DATAW wfd;
        hr = PropVariantToBuffer(propvar, &wfd, sizeof(wfd));
        
        if (SUCCEEDED(hr))
        {
            // wfd is now initialized
        }
    }
    PropVariantClear(&propvar);
}

要求

要求
最低受支持的客户端 Windows XP SP2、Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 SP1 [仅限桌面应用]
目标平台 Windows
标头 propvarutil.h
Library Propsys.lib
DLL Propsys.dll (6.0 或更高版本)
可再发行组件 Windows 桌面搜索 (WDS) 3.0

另请参阅

InitPropVariantFromBuffer

VariantToBuffer