Freigeben über


IMAPIProp::OpenProperty

Gilt für: Outlook 2013 | Outlook 2016

Gibt einen Zeiger auf eine Schnittstelle zurück, die für den Zugriff auf eine Eigenschaft verwendet werden kann.

HRESULT OpenProperty(
  ULONG ulPropTag,
  LPCIID lpiid,
  ULONG ulInterfaceOptions,
  ULONG ulFlags,
  LPUNKNOWN FAR * lppUnk
);

Parameter

ulPropTag

[in] Das Eigenschaftstag für die Eigenschaft, auf die zugegriffen werden soll. Sowohl der Bezeichner als auch der Typ müssen im Eigenschaftstag enthalten sein.

lpiid

[in] Ein Zeiger auf den Bezeichner für die Schnittstelle, die für den Zugriff auf die Eigenschaft verwendet werden soll. Der lpiid-Parameter darf nicht NULL sein.

ulInterfaceOptions

[in] Daten, die sich auf die durch den lpiid-Parameter identifizierte Schnittstelle beziehen.

ulFlags

[in] Eine Bitmaske von Flags, die den Zugriff auf die Eigenschaft steuert. Die folgenden Flags können festgelegt werden:

MAPI_CREATE

Wenn die Eigenschaft nicht vorhanden ist, sollte sie erstellt werden. Wenn die Eigenschaft vorhanden ist, sollte der aktuelle Wert der Eigenschaft verworfen werden. Wenn ein Aufrufer das MAPI_CREATE-Flag festlegt, sollte er auch das MAPI_MODIFY-Flag festlegen.

MAPI_DEFERRED_ERRORS

Ermöglicht es OpenProperty , erfolgreich zurückzugeben, möglicherweise bevor das Objekt vollständig für den Aufrufer verfügbar ist. Wenn das Objekt nicht verfügbar ist, kann durch einen nachfolgenden Objektaufruf ein Fehler ausgelöst werden.

MAPI_MODIFY

in diesen Situationen ist MAPI_MODIFY erforderlich:

  • Beim Öffnen einer Streameigenschaft, z . B. IID_IStream, um sie zu ändern.

  • Beim Öffnen einer eingebetteten Nachrichtenanlage, z. B. PR_ATTACH_DATA_OBJ mit IID_IMessage geöffnet, um sie zu ändern.

lppUnk

[out] Ein Zeiger auf die angeforderte Schnittstelle, die für den Zugriff auf Eigenschaften verwendet werden soll.

Rückgabewert

S_OK

Der angeforderte Schnittstellenzeiger wurde erfolgreich zurückgegeben.

MAPI_E_INTERFACE_NOT_SUPPORTED

Die angeforderte Schnittstelle wird für diese Eigenschaft nicht unterstützt.

MAPI_E_NO_ACCESS

Der Aufrufer verfügt über unzureichende Berechtigungen für den Zugriff auf die Eigenschaft.

MAPI_E_NO_SUPPORT

Das -Objekt kann keinen Zugriff auf diese Eigenschaft über die angeforderte Schnittstelle bereitstellen.

MAPI_E_NOT_FOUND

Die angeforderte Eigenschaft ist nicht vorhanden, und MAPI_CREATE im ulFlags-Parameter nicht festgelegt wurde.

MAPI_E_INVALID_PARAMETER

Der Eigenschaftentyp im Tag ist auf PT_UNSPECIFIED festgelegt.

Hinweise

Die IMAPIProp::OpenProperty-Methode ermöglicht den Zugriff auf eine Eigenschaft über eine bestimmte Schnittstelle. OpenProperty ist eine Alternative zu den Methoden IMAPIProp::GetProps und IMAPIProp::SetProps . Wenn getProps oder SetProps fehlschlägt , weil die Eigenschaft zu groß oder zu komplex ist, rufen Sie OpenProperty auf. OpenProperty wird in der Regel für den Zugriff auf Eigenschaften vom Typ PT_OBJECT verwendet.

Hinweise für Aufrufer

Um auf Nachrichtenanlagen zuzugreifen, öffnen Sie die eigenschaft PR_ATTACH_DATA_OBJ (PidTagAttachDataObject) je nach Art der Anlage mit einem anderen Schnittstellenbezeichner. In der folgenden Tabelle wird beschrieben, wie OpenProperty für die verschiedenen Anlagentypen aufgerufen wird:

Anlagetyp Zu verwendende Schnittstellenbezeichner
Binär
IID_IStream
Zeichenfolge
IID_IStream
Nachricht
IID_IMessage
OLE 2.0
IID_IStreamDocfile

IStreamDocfile ist eine Ableitung der IStream-Schnittstelle , die auf einer OLE 2.0-Verbunddatei basiert. IStreamDocfile ist die beste Wahl für den Zugriff auf OLE 2.0-Anlagen, da es den geringsten Mehraufwand mit sich bringt. Sie können IID_IStreamDocFile für die Eigenschaften verwenden, die Daten enthalten, die in strukturiertem Speicher gespeichert sind, die über die IStorage-Schnittstelle verfügbar sind.

Weitere Informationen zur Verwendung von OpenProperty mit Anlagen finden Sie unter PR_ATTACH_DATA_OBJ-Eigenschaft und Öffnen einer Anlage.

Verwenden Sie den IStream-Zeiger , den Sie erhalten, nicht, um die Seek - oder SetSize-Methode aufzurufen, es sei denn, Sie verwenden eine Nullposition oder größenvariable. Verlassen Sie sich auch nicht auf den Wert des plibNewPosition-Ausgabeparameters , der vom Seek-Aufruf zurückgegeben wird.

Wenn Sie OpenProperty aufrufen, um auf eine Eigenschaft mit der IStream-Schnittstelle zuzugreifen, verwenden Sie nur diese Schnittstelle, um Änderungen daran vorzunehmen. Versuchen Sie nicht, die Eigenschaft mit einer der anderen IMAPIProp: IUnknown-Methoden wie SetProps oder IMAPIProp::D eleteProps zu aktualisieren.

Versuchen Sie nicht, eine Eigenschaft mit OpenProperty mehrmals zu öffnen. Die Ergebnisse sind nicht definiert, da sie von Anbieter zu Anbieter variieren können.

Wenn Sie die zu öffnende Eigenschaft ändern müssen, legen Sie das flag MAPI_MODIFY fest. Wenn Sie nicht sicher sind, ob das -Objekt die -Eigenschaft unterstützt, aber der Meinung ist, dass dies der Fall sein sollte, legen Sie die MAPI_CREATE und MAPI_MODIFY Flags fest. Wenn MAPI_CREATE festgelegt wird, muss auch MAPI_MODIFY festgelegt werden.

Sie sind dafür verantwortlich, den im lppUnk-Parameter zurückgegebenen Schnittstellenzeiger in einen umzugestalten, der für die im lpiid-Parameter angegebene Schnittstelle geeignet ist. Sie müssen auch den zurückgegebenen Zeiger verwenden, um die IUnknown::Release-Methode aufzurufen, wenn Sie damit fertig sind.

Manchmal reicht das Festlegen der Flags im ulFlags-Parameter nicht aus, um den typ des Zugriffs auf die eigenschaft anzugeben, der erforderlich ist. Sie können zusätzliche Daten, z. B. Flags, in den ulInterfaceOptions-Parameter einfügen. Diese Daten sind schnittstellenabhängig. Einige Schnittstellen (z. B. IStream) verwenden es, andere nicht. Wenn Sie beispielsweise eine Eigenschaft öffnen, die mit IStream geändert werden soll, legen Sie zusätzlich zu MAPI_MODIFY das flag STGM_WRITE im parameter ulInterfaceOptions fest. Wenn Sie eine Tabelle mithilfe der IMAPITable-Schnittstelle öffnen, können Sie ulInterfaceOptions auf MAPI_UNICODE festlegen, um anzugeben, ob die Spalten in der Tabelle, die Zeichenfolgeneigenschaften enthalten, im Unicode-Format vorliegen sollen.

MFCMAPI-Referenz

Einen MFCMAP-Beispielcode finden Sie in der folgenden Tabelle.

Datei Funktion Kommentar
StreamEditor.cpp
CStreamEditor::ReadTextStreamFromProperty
MFCMAPI verwendet die IMAPIProp::OpenProperty-Methode , um eine Streamschnittstelle für große Text- und binäre Eigenschaften abzurufen.

Siehe auch