For each interface method there are three prototypes shown, each of which has the [VB], [JAVA], or [C++] notation beside it. In most cases the method prototypes return different values, depending on which language is being used.
The return value is usually handled by a variant data structure that will automatically handle whatever type is returned. A method call would be as follows:
Dim AttributeValue As VARIANT 'return value
AttributeValue = GetRequestAttribute("TheAttribute")
In this example code fragment, the return variable AttributeValue would be accepting a VT_BSTR type.
The return type will be of one of the java.lang.XXX class types; such as java.lang.String, or com.ms.Variant. A method call would be as follows:
com.ms.Variant AttributeValue; // return value
AttributeValue = GetRequestAttribute("TheAttribute");
In this example code fragment, the variable AttributeValue would be accepting a com.ms.Variant type.
The return value is always of type HRESULT, and it is from this return value that it can be determined whether the method succeeded or not, and if not, what the error was. Programmatic values that need to be returned are returned through "output" parameters in the method. The following example shows a C++ method call to retrieve a request attribute:
HRESULT hr;
BSTR strAttributeName = SysAllocString("TheAttribute");
BSTR strAttributeValue = SysAllocStringByteLen("", 49);
hr = pICertServerPolicy->GetRequestAttribute(
strAttributeName,
&strAttributeValue);
HRESULT hr;
BSTR strAttributeName = SysAllocString("TheAttribute");
BSTR strAttributeValue = NULL;
hr = pICertServerPolicy->GetRequestAttribute(
strAttributeName,
&strAttributeValue);
// Use strAttributeValue ...
// then free it when done
if (NULL != strAttributeName)
{
SysFreeString(strAttributeName);
}
if (NULL != strAttributeValue)
{
SysFreeString(strAttributeValue);
}
In the preceding code fragment, success or failure is returned to the "hr" variable. The request attribute value is a string returned in the BSTR strAttributeValue parameter.