The IPB_Arguments and IPB_Value interfaces pass values between the PowerBuilder VM and PowerBuilder extension modules. Through the IPB_Value interface, you can access information about each variable, including its type, null flag, access privileges, array or simple type, and reference type.
Method |
Description |
---|---|
Set of datatype-specific methods that return a pointer to the data in IPB_Value |
|
Returns the class handle of a PowerBuilder object |
|
Returns the datatype of a single data item or array |
|
Returns true if the IPB_Value instance contains an array, otherwise returns false |
|
Returns true if the IPB_Value instance is passed by reference |
|
Returns true if the IPB_Value instance contains a null value, otherwise returns false |
|
Returns true if the IPB_Value instance contains an object or object array, otherwise returns false |
|
Used to set the data contained in the IPB_Value instance to null so that data can be reset |
|
Set of datatype-specific methods that set the value of the IPB_Value instance |
A set of datatype-specific methods that return a pointer to the data in IPB_Value.
GetArray ( )
GetBlob( )
GetBool ( )
GetByte ( )
GetChar ( )
GetDate ( )
GetDateTime( )
GetDecimal ( )
GetDouble ( )
GetInt ( )
GetLong( )
GetLongLong( )
GetObject ( )
GetReal( )
GetString ( )
GetTime( )
GetUint( )
GetUlong ( )
A predefined PBNI datatype that corresponds to the PowerBuilder datatype in the method name.
This statement gets the date in the first value in the PBCallInfo structure and splits it into year, month, and day:
Session -> SplitDate(ci-> pArgs -> GetAt(0) -> GetDate(),&yy,&mm,&dd);
If IPB_Value contains a null value, or if you are trying to get a specific datatype from an IPB_Value instance of another datatype, the data retrieved is undetermined. If the datatype is string, blob, decimal, time, date, datetime, array, or object, the return value points to the same address pointed to by IPB_Value. As a result, changing either the variable that holds the return value or the value of the IPB_Value instance affects the other.
Returns the class handle of a PowerBuilder object.
GetClass( )
pbclass or null on error.
pbclass clz = ci-> pArgs-> GetAt(i)-> GetClass();
Returns the datatype of a single data item or array.
GetType()
pbuint
ArgsType = ci->pArgs->GetAt(i)->GetType(); switch (ArgsType) { case pbvalue_int: if (ci->pArgs->GetAt(i)->IsNull()) pArguments[i].int_val=1; else pArguments[i].int_val = ci->pArgs->GetAt(i)->GetInt(); break; ...
If the IPB_Value instance contains an object or structure, GetType returns the class ID of the data. Otherwise, it returns a simple datatype defined in the list of pbvalue_type enumerated types.
Returns true if the IPB_Value instance contains an array; otherwise, returns false.
IsArray( )
pbboolean
This example tests whether an IPB_Value instance is an array before obtaining the array:
if(ci->pArgs->GetAt(i)->IsArray()) { pArguments[i].array_val = ci->pArgs->GetAt(i)->GetArray(); continue; }
Returns true if the IPB_Value instance contains a by reference argument; otherwise it returns false.
IsByRef()
pbboolean
This example shows how you would use IsByRef to test whether an argument is obtained by reference:
if(ci->pArgs->GetAt(i)->IsByRef()) ...
Returns true if the IPB_Value instance contains an enumerated value; otherwise it returns false.
IsEnum( )
pbboolean
Returns true if the IPB_Value instance contains a null value; otherwise, it returns false.
IsNull( )
pbboolean
This example tests whether an IPB_Value instance contains a null value before attempting to obtain its value:
if(ci->pArgs->GetAt(i)->IsObject()) { if (ci->pArgs->GetAt(i)->IsNull()) pArguments[i].obj_val=0; else pArguments[i].obj_val = ci->pArgs->GetAt(i)->GetObject(); continue; } ...
Returns true if the IPB_Value instance contains an object or object array; otherwise it returns false.
IsObject( )
pbboolean
This example tests whether an IPB_Value instance contains an object before attempting to obtain the object:
if( ci->pArgs->GetAt(i)->IsObject()) { if (ci->pArgs->GetAt(i)->IsNull()) pArguments[i].obj_val = 0; else pArguments[i].obj_val = ci->pArgs->GetAt(i)->GetObject(); continue; } ...
Set of datatype-specific methods that set the value of the IPB_Value instance.
SetArray ( pbarray array )
SetBlob( pbblob blob )
SetBool ( pbboolean boolean )
SetByte ( pbbyte byte )
SetChar ( pbchar char )
SetDate ( pbdate date )
SetDateTime( pbdatetime datetime )
SetDecimal ( pbdecimal dec)
SetDouble ( pbdouble double)
SetInt ( pbint int )
SetLong( pblong long )
SetLongLong( pblonglong longlong )
SetObject ( pbobject object )
SetPBString ( pbstring string)
SetReal( pbreal real )
SetString ( LPCTSTR string)
SetTime( pbtime time )
SetUint( pbuint uint )
SetUlong ( pbulong ulong )
PBXRESULT.
This example uses the IPB_Value SetPBString method to set values in PBCallInfo. It also uses the IPB_Session SetString method to set the ret_val string to the return value in the PBCallInfo structure:
pbclass cls; pbmethodID mid; PBCallInfo* ci = new PBCallInfo; pbstring ret_val; LPCTSTR pStr; cls= Session -> GetClass(myobj); if (isAny) mid=Session-> GetMethodID(cls, "uf_any_byvalue", PBRT_FUNCTION, "AAAAA"); else mid=Session-> GetMethodID(cls, "uf_string_byvalue", PBRT_FUNCTION, "SSSSS"); Session-> InitCallInfo(cls, mid, ci); // Call IPB_Value SetPBString method ci-> pArgs -> GetAt(0) -> SetPBString(s_low); ci-> pArgs -> GetAt(1) -> SetPBString(s_mid); ci-> pArgs -> GetAt(2) -> SetPBString(s_high); pStr = Session -> GetString(s_null); if (pStr != 0) { if (strcmp(pStr, "null") == 0 ) ci-> pArgs -> GetAt(3) -> SetToNull(); else ci-> pArgs -> GetAt(3) -> SetPBString(s_null); } Session -> InvokeObjectFunction(myobj, mid, ci); ret_val = Session -> NewString("");
// Call IPB_Session SetString method Session -> SetString(ret_val, Session->GetString (ci->returnValue->GetString())); Session -> FreeCallInfo(ci); delete ci; return ret_val;
These methods automatically set the value of IPB_Value to not null and return an error if the datatype to be set does not match the existing datatype. The error code is PBX_E_MISMATCHED_DATA_TYPE. If the value is a read-only argument, it returns the error PBX_E_READONLY_ARGS. If the datatype is string or blob, a deep copy is performed. The existing value is destroyed first, and then the contents of the argument are copied into a new value.
Sets the data contained in the IPB_Value instance to null so the data can be reset.
SetToNull( )
PBXRESULT. If the value is a read-only argument, the error PBX_E_READONLY_ARGS is returned.
This example shows the use of SetToNull when a null blob value is returned:
case pbvalue_blob: pStr=(LPCTSTR)Session-> GetBlob(retVal.blob_val); if (strncmp(pStr, "null", 4)==0 ) ci->returnValue->SetToNull(); else ci->returnValue->SetBlob(retVal.blob_val); break; ...