# IPropertyBag::Read

Called by the control to read a property from the storage provided by the container.

HRESULT Read(

LPCOLESTR pszPropName, | //Pointer to the property to be read
VARIANT* pVar, | //Pointer to the VARIANT to receive the property value
IErrorLog* pErrorLog | //Pointer to the caller’s error log
); |

Parameters

pszPropName
  [in] Pointer to the name of the property to read. Cannot be NULL.
pVar
  [in, out] Pointer to the caller-initialized VARIANT that is to receive the property value on output. The method must set both type and value fields in the VARIANT before returning. If the caller initialized the pVar->vt field on entry, the property bag should attempt to coerce the value it knows into this type. If the caller sets pVar->vt to VT_EMPTY, the property bag can use whatever type is convenient.
pErrorLog
  [in] Pointer to the caller’s IErrorLog interface in which the property bag stores any errors that occur during reads. Can be NULL in which case the caller is not interested in errors.

Return Values

S_OK
  The property was read successfully. The caller becomes responsible for any allocations that are contained in the VARIANT in pVar.
E_POINTER
  The address in pszPropName is not valid (such as NULL).
E_INVALIDARG
  The property named with pszPropName does not exist in the property bag.
E_FAIL
  The property bag was unable to read the specified property, such as if the caller specified a data type to which the property bag could not coerce the known value. If the caller supplied an error log, a more descriptive error was sent there.

Remarks

This method asks the property bag to read the property named with pszPropName into the caller-initialized VARIANT in pVar. Errors that occur are logged in the error log pointed to by pErrorLog. When pVar->vt specifies another object pointer (VT_UNKNOWN) then the property bag is responsible for creating and initializing the object described by pszPropName.

E_NOTIMPL is not a valid return code since any object implementing this interface must support the entire functionality of the interface.

See Also

IPropertyBag::Write