Возвращаемые значения в C++

В C++ возвращаемое значение обычно имеет тип HRESULT. Именно из этого возвращаемого значения можно определить, был ли метод успешным или нет, а если нет, то, что произошла ошибка. Службы сертификатов обычно возвращают S_OK для HRESULT после успешного завершения метода. Программные значения, которые необходимо вернуть, возвращаются с помощью параметров out в методе. В следующем примере показан вызов метода C++ для получения свойства запроса:

BSTR      bstrPropName = NULL;
VARIANT   varProp;
HRESULT   hr;

VariantInit(&varProp);

bstrPropName = SysAllocString(L"RequestID");
if (NULL == bstrPropName)
{
    printf("Failed SysAllocString\n");
    // Take application-specific error action.
    exit(1);
}

// Retrieve the request property.
// pCertServerPolicy is a pointer to a previously
// instantiated ICertServerPolicy object.
hr = pCertServerPolicy->GetRequestProperty(bstrPropName,
                                           PROPTYPE_LONG,
                                           &varProp);
if (S_OK != hr)
{
    printf("Failed GetRequestProperty [%x]\n", hr);
    // Take application-specific error action.
    // ...
}
else
{
    // Successfully retrieved property; use varProp as needed.
    // ...
}

// Done processing.
VariantClear(&varProp);
if (NULL != bstrPropName)
    SysFreeString(bstrPropName);

В приведенном выше фрагменте кода успешное выполнение или сбой возвращается в переменную HRESULThr. Необходимо проверить переменную HRESULT на наличие успеха [обработано в коде условием (S_OK != hr)]. Если метод выполнен успешно, значение свойства запроса возвращается в параметре VARIANTvarProp.