IPB_Session interface:
GetPBAnyField method
Description
Obtains the value of a variable of type Any.
Syntax
GetPBAnyField( pbobject obj, pbfieldID fid, pbboolean& isNull )
Argument |
Description |
---|---|
obj |
A valid object handle for the object whose value is to be obtained |
fid |
The field ID of the variable |
isNull |
Indicates whether the variable is null |
Return Values
IPB_Value*.
Examples
This example tests all the functions used to get the value of variables of type Any, using PushLocalFrame and PopLocalFrame to simulate the scope of a function call:
session->PushLocalFrame();
pbgroup vgroup = session->FindGroup("n_test",
pbgroup_userobject);
pbclass vcls = session->FindClass(vgroup, "n_test");
pbobject vobj = session->NewObject(vcls);
pbboolean isNull;
pbfieldID vfid = session->GetFieldID(vcls, "i_a");
IPB_Value* value = session->GetPBAnyField(vobj,
vfid, isNull);
pbstring str = value->GetString(); // save actual value
vfid = session->GetSharedVarID(vgroup, "s_a");
value = session->GetPBAnySharedVar(vgroup,
vfid, isNull);
//Get the actual value here.
vfid = session->GetGlobalVarID("g_a");
value = session->GetPBAnyGlobalVar(vfid, isNull);
//Get the actual value here.
vfid = session->GetFieldID(vcls, "i_array");
pbarray arr = session->GetArrayField(vobj,
vfid, isNull); //Get the any array first.
long dim = 1;
value = session->GetPBAnyArrayItem(arr, &dim, isNull);
//Get the actual value here.
session->PopLocalFrame();
Usage
The value you retrieve must be of datatype Any to use this function; that is, the variable associated with the function must be declared as a variable of type Any in the development environment. If it is not, the function returns a null pointer and the value of isNull is set to true.
This function returns a pointer to an IPB_Value instance. When it is called, memory is allocated for the returned IPB_Value instance, and the pointer is recorded in the current local frame. The pointer is deleted automatically when the current local frame is popped, which occurs when the current local function returns (you can also call PopLocalFrame to force the frame to be popped).
If you want to use the value returned, you must save the value pointed to by the IPB_Value instance (not the IPB_Value instance itself) before the frame is popped. If you save the pointer itself, the value is only valid until the original value is destroyed.
You can use the AcquireValue function to save the value, or one of the IPB_Value Get<type> functions. For example, the following code saves the string value in the IPB_Value instance ivalue into the string str. The value in str can be used after the local frame is popped and ivalue is deleted:
IPB_Value* ivalue = session->GetPBAnyField(vobj, vfid,
isNull);
pbstring str = ivalue->GetString();
If you do not know the actual datatype of the Any variable, use the IPB_Value GetType function to get its datatype first, then use the appropriate get function to get its value.
The value in the IPB_Value instance is a reference to the original value. If you change the actual value of the returned IPB_Value, the original value is also changed. If you use the AcquireValue function to save the value, it clones a new IPB_Value and resets the existing IPB_Value pointer.