IWMSContext::SetArrayValue

banner art

Previous Next

IWMSContext::SetArrayValue

The SetArrayValue method specifies a pointer to a SAFEARRAY.

Syntax

  HRESULT SetArrayValue(
  LPCWSTR  pstrName,
  long  lNameHint,
  SAFEARRAY(BSTR)  psaValue,
  long  lOptions
);

Parameters

pstrName

[in] LPCWSTR specifying the name portion of the name-value pair in the context.

lNameHint

[in] long containing an optional key that can be used to more efficiently access a value.

psaValue

[in] Pointer to a SAFEARRAY of BSTR values.

lOptions

[in] long containing either zero or the WMS_CONTEXT_SET_PROPERTY_NAME_BY_VALUE enumeration flag defined in the WMS_CONTEXT_OPTIONS enumeration type. By default, the name is specified by reference.

Return Values

If the method succeeds, it returns S_OK. If it fails, it returns an HRESULT error code.

Return code Number Description
E_INVALIDARG 0x80070057 The psaValue parameter or the pstrName parameter is NULL.
E_OUTOFMEMORY 0x8007000E Could not allocate memory for the value.

Remarks

The current release has no public contexts that contain a SAFEARRAY value, but you can set a custom value in a context and retrieve it later. The server does not recognize custom values.

Example Code

// Declare variables
HRESULT hr = S_OK;
SAFEARRAY* pSA = NULL;
SAFEARRAYBOUND rgsabound[1];
CComBSTR bstrColor[3];
long lSAIndex = 0;
int nColorIndex = 0;

// Create an array of BSTRs.
bstrColor[nColorIndex++] = L"Red";
bstrColor[nColorIndex++] = L"Blue";
bstrColor[nColorIndex++] = L"Green";

// Specify the bounds for the SAFEARRAY.
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nColorIndex;

// Create the SAFEARRAY.
pSA = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
if (NULL == pSA)
{
    return E_OUTOFMEMORY;
}

// Fill the SAFEARRAY with values.
for (lSAIndex=0; lSAIndex<nColorIndex && SUCCEEDED(hr); lSAIndex++)
{
    VARIANT varElement;
    VariantInit(&varElement);
    V_VT(&varElement) = VT_BSTR;
    V_BSTR(&varElement) = bstrColor[lSAIndex];
    hr = SafeArrayPutElement(pSA, &lSAIndex, &varElement);
    VariantClear(&varElement);
}

if (FAILED(hr)) goto EXIT;

// Use a pointer to an existing context to add a SAFEARRAY.
if (NULL != pUSerContext)
{
    hr = pUSerContext->SetArrayValue( 
                               L"SafeArray", 
                               WMS_CONTEXT_NO_NAME_HINT,
                               pSA,
                               WMS_CONTEXT_SET_PROPERTY_NAME_BY_VALUE
    if (FAILED(hr)) goto EXIT;
}

EXIT:
    // Release the SAFEARRAY.
    SafeArrayDestroy(pSA);
    pSA = NULL;
    //TODO: Release temporary objects.

Requirements

Header: wmscontext.h.

Library: WMSServerTypeLib.dll.

Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.

See Also

Previous Next