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_OBJ 以 IID_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 方法可讓您透過特定介面存取屬性。 OpenProperty 是 IMAPIProp::GetProps 和 IMAPIProp::SetProps 方法的替代方法。 當 GetProps 或 SetProps 因為屬性太大或太複雜而失敗時,請呼叫 OpenProperty。 OpenProperty 通常用來存取類型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 指標來呼叫其 Seek 或 SetSize 方法。 此外,請勿依賴從 Seek 呼叫傳回的 plibNewPosition 輸出參數值。
如果您呼叫 OpenProperty 來存取 具有 IStream 介面的屬性,請只使用該介面對其進行變更。 請勿嘗試使用任何其他 IMAPIProp :IUnknown 方法來更新 屬性,例如 SetProps 或 IMAPIProp::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 方法來擷取大型文字和二進位屬性的數據流介面。 |