Übertragen eines Properties-Only-Objekts auf das Gerät
Während das Beispiel im vorherigen Thema die Erstellung von Inhalten auf einem Gerät veranschaulicht hat, das sowohl aus Eigenschaften als auch aus Daten besteht, konzentriert sich dieses Thema auf die Erstellung eines objekts nur für Eigenschaften.
Nur Eigenschaftenübertragungen werden mithilfe der in der folgenden Tabelle beschriebenen Schnittstellen durchgeführt.
| Schnittstelle | BESCHREIBUNG |
|---|---|
| IPortableDeviceContent-Schnittstelle | Ermöglicht den Zugriff auf die inhaltsspezifischen Methoden. |
| IPortableDeviceValues-Schnittstelle | Wird verwendet, um Eigenschaften abzurufen, die den Inhalt beschreiben. |
Die TransferContactToDevice Funktion im ContentTransfer.cpp-Modul der Beispielanwendung veranschaulicht, wie eine Anwendung Kontaktinformationen von einem PC auf ein verbundenes Gerät übertragen kann. In diesem speziellen Beispiel ist der übertragene Kontaktname ein hart codiertes "John Kane", und die telefonnummer des übertragenen Kontakts lautet immer "425-555-0123".
Die erste Aufgabe der TransferContactToDevice Funktion besteht darin, den Benutzer aufzufordern, einen Objektbezeichner für das übergeordnete Objekt auf dem Gerät einzugeben (unter dem der Inhalt übertragen wird).
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");
}
Der nächste Schritt ist das Abrufen von Kontakteigenschaften, die verwendet werden, wenn der neue Kontakt im Beispiel auf das Gerät geschrieben wird. Der Abruf von Kontakteigenschaften wird von der GetRequiredPropertiesForPropertiesOnlyContact Hilfsfunktion ausgeführt.
// 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);
}
}
Diese Funktion schreibt die folgenden Daten in ein IPortableDeviceValues-Objekt.
- Der Objektbezeichner für das übergeordnete Element des Kontakts auf dem Gerät. (Dies ist das Ziel, an dem das Gerät das Objekt speichert.)
- Der Objekttyp (ein Kontakt).
- Der Kontaktname (eine hart codierte Zeichenfolge von "John Kane").
- Die Telefonnummer des Kontakts (eine hart codierte Zeichenfolge "425-555-0123").
Im letzten Schritt wird das eigenschaftenbasierte Objekt auf dem Gerät erstellt (mithilfe der von der Hilfsfunktion festgelegten GetRequiredPropertiesForPropertiesOnlyContact Eigenschaften). Dies wird erreicht, indem die IPortableDeviceContent::CreateObjectWithPropertiesOnly-Methode aufgerufen wird.
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;
}