Поделиться через


Передача объекта Properties-Only на устройство

Хотя в примере в предыдущем разделе показано создание содержимого на устройстве, состоящего из свойств и данных, в этом разделе рассматривается создание объекта только для свойств.

Передача только свойств выполняется с помощью интерфейсов, описанных в следующей таблице.

Интерфейс Описание
Интерфейс IPortableDeviceContent Предоставляет доступ к методам, зависящим от содержимого.
Интерфейс IPortableDeviceValues Используется для получения свойств, описывающих содержимое.

 

Функция TransferContactToDevice в модуле ContentTransfer.cpp примера приложения демонстрирует, как приложение может передавать контактные данные с компьютера на подключенное устройство. В этом конкретном примере переданное имя контакта является жестко закодированное "Джон Кейн", а передаваемый контактный номер телефона всегда "425-555-0123".

Первая задача, выполняемая функцией TransferContactToDevice , — предложить пользователю ввести идентификатор объекта для родительского объекта на устройстве (в котором будет передаваться содержимое).

HRESULT                             hr = S_OK;
WCHAR                               szSelection[81]        = {0};
CComPtr<IPortableDeviceValues>      pFinalObjectProperties;
CComPtr<IPortableDeviceContent>     pContent;

// Prompt user to enter an object identifier for the parent object on the device to transfer.
printf("Enter the identifer of the parent object which the contact will be transferred under.\n>");
hr = StringCbGetsW(szSelection,sizeof(szSelection));
if (FAILED(hr))
{
    printf("An invalid object identifier was specified, aborting content transfer\n");
}

Следующим шагом является получение свойств контакта, которые будут использоваться, когда пример записывает новый контакт на устройство. Получение свойств контакта выполняется вспомогательной GetRequiredPropertiesForPropertiesOnlyContact функцией.

// 2) Get the properties that describe the object being created on the device

if (SUCCEEDED(hr))
{
    hr = GetRequiredPropertiesForPropertiesOnlyContact(szSelection,              // Parent to transfer the data under
                                                       &pFinalObjectProperties);  // Returned properties describing the data
    if (FAILED(hr))
    {
        printf("! Failed to get required properties needed to transfer an image file to the device, hr = 0x%lx\n", hr);
    }
}

Эта функция записывает следующие данные в объект IPortableDeviceValues .

  • Идентификатор объекта для родительского объекта контакта на устройстве. (Это место назначения, в котором устройство будет хранить объект.)
  • Тип объекта (контакт).
  • Имя контакта (жестко закодированная строка "John Kane").
  • Контактный номер телефона (жестко закодированная строка "425-555-0123").

На последнем шаге создается объект только для свойств на устройстве (с помощью свойств, заданных вспомогательной GetRequiredPropertiesForPropertiesOnlyContact функцией). Это достигается путем вызова метода IPortableDeviceContent::CreateObjectWithPropertiesOnly .

if (SUCCEEDED(hr))
{
    PWSTR pszNewlyCreatedObject = NULL;
    hr = pContent->CreateObjectWithPropertiesOnly(pFinalObjectProperties,    // Properties describing the object data
                                                  &pszNewlyCreatedObject);
    if (SUCCEEDED(hr))
    {
        printf("The contact was transferred to the device.\nThe newly created object's ID is '%ws'\n",pszNewlyCreatedObject);
    }

    if (FAILED(hr))
    {
        printf("! Failed to transfer contact object to the device, hr = 0x%lx\n",hr);
    }

    // Free the object identifier string returned from CreateObjectWithPropertiesOnly
    CoTaskMemFree(pszNewlyCreatedObject);
    pszNewlyCreatedObject = NULL;
}

Интерфейс IPortableDevice

Интерфейс IPortableDeviceContent

Интерфейс IPortableDeviceValues

Руководство по программированию