IMAPIProp::GetProps (Compact 7)

3/12/2014

This method retrieves one or more properties.

Syntax

HRESULT GetProps (
  LPSPropTagArray lpPropTagArray,
  ULONG ulFlags,
  ULONG FAR * lpcValues,
  LPSPropValue FAR * lppPropArray
);

Parameters

  • lpPropTagArray
    [in] Pointer to a reference to an SPropTagArray structure that is an array of property tags indicating the properties whose values to retrieve. Cannot be NULL.
  • ulFlags
    [in] Must be zero or equal to MAPI_UNICODE. In either case, this parameter is ignored.
  • lpcValues
    [out] Pointer to a reference to a count of property values that the lppPropArray parameter points to. If lppPropArray is NULL on output, lpcValues is zero on output.
  • lppPropArray
    [out] Pointer to a reference to the array of retrieved property values.

Return Value

The GetProps method returns the following standard HRESULT values.

Term Description

S_OK

The operation succeeded.

Note   If GetProps returns an HRESULT value of S_OK, it still might not be able to access the property. This lack of access can happen when the ulPropTag member of the property value has a property type of PT_ERROR and a value of MAPI_E_NOT_FOUND. In this case, use IMAPIProp::OpenProperty to access the property.

E_FAIL

The operation failed due to an unspecified error.

E_INVALIDARG

The operation failed because one or more of the arguments is not valid.

E_OUTOFMEMORY

The operation failed because it needs more memory resources.

E_UNEXPECTED

The operation failed due to an unexpected error.

MAPI_W_ERRORS_RETURNED

The call succeeded, but one or more properties could not be accessed. The ulPropTag member of the property value for each inaccessible property has a property type of PT_ERROR and an identifier of zero. When this warning is returned, the call should be handled as successful.

MAPI_E_INVALID_PARAMETER

Zero was passed in the cValues member of the SPropTagArray structure that the lpPropTagArray parameter points to, or a parameter contained an invalid value on input.

MAPI_E_INVALID_TYPE

An invalid property type was specified.

Remarks

The property values are returned in the same order that they were requested. That is, the order of properties in the property tag array that lpPropTagArray points to matches the order in the array of property value structures that by lppPropArray points to.

The property types specified in the aulPropTag members of the property tag array indicate the type of value that should be returned in the Value member of each property value structure.

If property types are specified in the SPropTagArray structure in lpPropTagArray, the property values in the SPropValue returned in lppPropArray have types that exactly match the requested types, unless an error value is returned instead.

For properties of type PT_OBJECT, call IMAPIProp::OpenProperty instead of GetProps.

Free the returned SPropValue structure by calling the MAPIFreeBuffer function only if GetProps returns S_OK or MAPI_W_ERRORS_RETURNED.

If GetProps returns MAPI_W_ERRORS_RETURNED because it could not access one or more properties, check the property tags of the returned properties. The failed properties will have the following values set in their property value structure:

  • Property type in the ulPropTag member set to PT_ERROR.
  • Property value in the Value member set to a status code for the error, such as MAPI_E_NOT_FOUND.

Property values that fail because this method does not support them must set their Value member to E_INVALIDARG.

Code Example

The following code example demonstrates how to use GetProps.

Note

To make the following code example easier to read, security checking and error handling are not included. This code example should not be used in a release configuration unless it has been modified to include them.

HRESULT GetPropsExample(IMessage * pMsg)
{
    HRESULT hr           = E_FAIL;
    SPropValue * rgprops = NULL;
    ULONG rgTags[]       = {3, PR_SENDER_EMAIL_ADDRESS, PR_SUBJECT, PR_IMPORTANCE};
    ULONG cCount         = 0;

    // Get the message's properties.
    hr = pMsg->GetProps((LPSPropTagArray) rgTags, MAPI_UNICODE, &cCount, &rgprops);

    // Access the properties that were just retrieved.
    if (SUCCEEDED(hr))
    {
        // Check that the ulPropTag member of each property value is of the property type requested, and that it does not have a value of PT_ERROR.
        if (rgprops[0].ulPropTag == PR_SENDER_EMAIL_ADDRESS)
        {
            DEBUGMSG(TRUE, (L"From: %s \r\n", rgprops[0].Value.lpszW));
        }

        if (rgprops[1].ulPropTag == PR_SUBJECT)
        {
            DEBUGMSG(TRUE, (L"Subject: %s \r\n", rgprops[1].Value.lpszW));
        }

        if (rgprops[2].ulPropTag == PR_IMPORTANCE)
        {
            DEBUGMSG(TRUE, (L"Importance: %d \r\n", rgprops[2].Value.ul));
        }

        // Free the returned SPropValue structure.
        MAPIFreeBuffer(rgprops);
    }

    return hr;
}

Requirements

Header

mapidefs.h

Library

cemapi.lib

See Also

Reference

IMAPIProp
IMAPIProp::OpenProperty
MAPIAllocateBuffer
MAPIAllocateMore