共用方式為


IMAPIProp::OpenProperty

適用於:Outlook 2013 |Outlook 2016

傳回可用來存取屬性之介面的指標。

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

參數

ulPropTag

[in]要存取之屬性的屬性標籤。 標識碼和類型都必須包含在屬性標記中。

lpiid

[in]要用來存取屬性之介面的標識碼指標。 lpiid 參數不得為 null

ulInterfaceOptions

[in]與 lpiid 參數所識別之介面相關的數據。

ulFlags

[in]控制屬性存取權的旗標位掩碼。 您可以設定下列旗標:

MAPI_CREATE

如果屬性不存在,則應該建立它。 如果屬性存在,則應該捨棄屬性的目前值。 呼叫端設定MAPI_CREATE旗標時,也應該設定MAPI_MODIFY旗標。

MAPI_DEFERRED_ERRORS

允許 OpenProperty 成功傳回,可能在物件完全可供呼叫端使用之前。 如果對象無法使用,則進行後續物件呼叫可能會引發錯誤。

MAPI_MODIFY

在這些情況下需要MAPI_MODIFY:

  • 開啟數據流屬性時,例如 IID_IStream修改它。

  • 開啟內嵌訊息附件時,例如 PR_ATTACH_DATA_OBJIID_IMessage開啟,以修改它。

lppUnk

[out]要用於屬性存取之要求介面的指標。

傳回值

S_OK

已成功傳回要求的介面指標。

MAPI_E_INTERFACE_NOT_SUPPORTED

此屬性不支援要求的介面。

MAPI_E_NO_ACCESS

呼叫端沒有足夠的許可權可存取 屬性。

MAPI_E_NO_SUPPORT

對象無法透過要求的介面提供這個屬性的存取權。

MAPI_E_NOT_FOUND

要求的屬性不存在,且未在 ulFlags 參數中設定MAPI_CREATE。

MAPI_E_INVALID_PARAMETER

標記中的屬性類型設定為 PT_UNSPECIFIED。

註解

IMAPIProp::OpenProperty 方法可讓您透過特定介面存取屬性。 OpenPropertyIMAPIProp::GetPropsIMAPIProp::SetProps 方法的替代方法。 當 GetPropsSetProps 因為屬性太大或太複雜而失敗時,請呼叫 OpenPropertyOpenProperty 通常用來存取類型PT_OBJECT的屬性。

呼叫者注意事項

若要存取訊息附件,請根據附件的類型,開啟 PR_ATTACH_DATA_OBJ (PidTagAttachDataObject) 屬性與不同的介面標識符。 下表描述如何針對不同類型的附件呼叫 OpenProperty

附件類型 要使用的介面識別碼
二進位
IID_IStream
String
IID_IStream
郵件
IID_IMessage
OLE 2.0
IID_IStreamDocfile

IStreamDocfile 是以 OLE 2.0 複合檔案為基礎的 IStream 介面衍生。 IStreamDocfile 是存取 OLE 2.0 附件的最佳選擇,因為它牽涉到最少的額外負荷。 您可以針對這些屬性使用IID_IStreamDocFile,這些屬性包含儲存在可透過 IStorage 介面取得之結構化記憶體中的數據。

如需如何搭配附件使用 OpenProperty 的詳細資訊,請 參閱 PR_ATTACH_DATA_OBJ 屬性和 開啟附件

除非您使用零的位置或大小變數,否則請勿使用您收到的 IStream 指標來呼叫其 SeekSetSize 方法。 此外,請勿依賴從 Seek 呼叫傳回的 plibNewPosition 輸出參數值。

如果您呼叫 OpenProperty 來存取 具有 IStream 介面的屬性,請只使用該介面對其進行變更。 請勿嘗試使用任何其他 IMAPIProp :IUnknown 方法來更新 屬性,例如 SetPropsIMAPIProp::D eleteProps

請勿嘗試多次使用 OpenProperty 開啟屬性。 結果未定義,因為它們可能會因提供者而異。

如果您需要修改要開啟的屬性,請設定MAPI_MODIFY旗標。 如果您不確定物件是否支援 屬性,但您認為該屬性應該支援,請設定MAPI_CREATE並MAPI_MODIFY旗標。 每當設定MAPI_CREATE時,也必須設定MAPI_MODIFY。

您必須負責將 lppUnk 參數中傳回的介面指標重新轉換為適合 lpiid 參數中指定之介面的介面指標。 當您完成時,也必須使用傳回的指標來呼叫其 IUnknown::Release 方法。

有時候,在 ulFlags 參數中設定旗標並不足以指出所需屬性的存取類型。 您可以在 ulInterfaceOptions 參數中放置其他數據,例如 flags。 此數據與介面相依。 某些介面 (例如 IStream) 使用它,而其他介面則不會使用。 例如,當您開啟要使用 IStream 修改的屬性時,除了MAPI_MODIFY之外,在 ulInterfaceOptions 參數中設定STGM_WRITE旗標。 當您使用 IMAPITable 介面開啟資料表時,可以將 ulInterfaceOptions 設定為 MAPI_UNICODE,以指出保存字串屬性的數據表中的數據行是否應該採用 Unicode 格式。

MFCMAPI 參考

如需 MFCMAPI 範例程式代碼,請參閱下表。

檔案 Function Comment
StreamEditor.cpp
CStreamEditor::ReadTextStreamFromProperty
MFCMAPI 使用 IMAPIProp::OpenProperty 方法來擷取大型文字和二進位屬性的數據流介面。

另請參閱