- Header file contents
- Class and interface summary
- IPB_Arguments interface
- IPB_ResultSetAccessor interface
- IPB_RSItemData interface
- IPB_Session interface
- IPB_Value interface
- IPB_VM interface
- IPBX_Marshaler interface
- IPBX_NonVisualObject interface
- IPBX_UserObject interface
- IPBX_VisualObject interface
- PBArrayInfo structure
- PBCallInfo structure
- PB_DateData structure
- PB_DateTimeData structure
- PB_TimeData structure
- PBX_DrawItemStruct structure
- PBArrayAccessor template class
- PBBoundedArrayCreator template class
- PBBoundedObjectArrayCreator class
- PBObjectArrayAccessor class
- PBUnboundedArrayCreator template class
- PBUnboundedObjectArrayCreator class
- Exported methods
- Method exported by PowerBuilder VM
About this chapter
This chapter contains reference information about the classes, structures, and methods of the PowerBuilder Native Interface.
PBNI classes and interfaces are defined in a set of header files.
pbni.h
The classes, structures, and methods defined in the header file pbni.h allow PowerBuilder extension modules to interact with PowerBuilder. This file also includes the pbarray.h, pbfield.h, and pbnimd.h header files.
pbarray.h, pbfield.h, pbtraits.h, and pbnimd.h
pbarray.h contains helper classes that make it easier to create arrays and access data in them. pbfield.h contains a helper class that makes it easier to access fields. Both header files rely on pbtraits.h, which provides specializations for the Value enumerated types. pbnimd.h contains machine-specific datatype definitions. These files should not be included directly in your code.
pbext.h
The classes, structures, and methods defined in the header file pbext.h must be implemented in PowerBuilder extension modules to allow PowerBuilder applications to use the extension modules. pbext.h includes pbni.h and pbevtid.h.
pbevtid.h
pbevtid.h contains mappings from PowerBuilder event strings to internal event identifiers. These mappings allow the PBVM to automatically fire events that you include in the description of an extension. For more information, see Event processing in visual extensions.
pbrsa.h
pbrsa.h contains structures and interfaces used to access data in DataStores and DataWindow controls.
This table lists the classes and interfaces that make up PBNI. After the table, the classes and interfaces are listed in alphabetical order. The methods for each class are listed in alphabetical order after the class description.
Several additional helper classes that are defined in pbni.h are not listed in the table. These helper classes include:
-
PBArrayInfoHolder and PBCallInfoHolder -- used to hold a PBArrayInfo or PBCallInfo variable and release it when it is out of scope
-
PBEventTrigger, PBObjectFunctionInvoker, and PBGlobalFunctionInvoker -- used to trigger events and call object and global functions
Object |
Description |
Defined in |
---|---|---|
Used to access the arguments of the PBCallInfo structure. |
pbni.h |
|
Used to access data in a DataWindow or DataStore. |
pbrsa.h |
|
Used to set data values in a result set from a DataWindow or DataStore. |
pbrsa.h |
|
Used to interoperate with PowerBuilder. An abstract interface, it defines methods for accessing PowerScript data, calling PowerScript functions, catching and throwing PowerScript exceptions, and setting a marshaler to convert PowerBuilder data formats to the user's communication protocol. |
pbni.h |
|
Used to hold PowerBuilder data, IPB_Value contains information about each variable, including its type, null flag, access privileges, array or simple type, and reference type. |
pbni.h |
|
Used to load PowerBuilder applications in third-party applications and interoperate with the PowerBuilder virtual machine (PBVM). |
pbni.h |
|
Used to hold information about arrays. |
pbni.h |
|
Used to hold arguments and return type information in function calls between PBNI and PowerBuilder. |
pbni.h |
|
Used to pass data of type Date in the SetData function in the IPB_RSItemData interface. |
pbrsa.h |
|
Used to pass data of type DateTime in the SetData function in the IPB_RSItemData interface. |
pbrsa.h |
|
Used to pass data of type Time in the SetData function in the IPB_RSItemData interface. |
pbrsa.h |
|
Used to hold the properties of an external visual control that you want to draw using the PBX_DrawVisualObject function. |
pbext.h |
|
Used to access items in an array. |
pbarray.h |
|
Used to access items in an object array. |
pbarray.h |
|
Used to create bounded arrays. |
pbarray.h |
|
Used to create bounded object arrays. |
pbarray.h |
|
Used to create unbounded arrays. |
pbarray.h |
|
Used to create unbounded object arrays. |
pbarray.h |
|
Used to invoke remote methods and convert PowerBuilder data formats to the user's communication protocol. A marshaler extension is a PowerBuilder extension that acts as the bridge between PowerBuilder and other components, such as EJBs (obsolete), Java classes, CORBA objects, Web services (obsolete), and so on. |
pbext.h |
|
Inherits from IPBX_UserObject and is the direct ancestor class of nonvisual PowerBuilder native classes. |
pbext.h |
|
The ancestor class of PowerBuilder native classes. It has two functions, Destroy and Invoke. |
pbext.h |
|
Inherits from IPBX_UserObject and is the direct ancestor class of visual PowerBuilder native classes. |
pbext.h |
|
Some exported methods must be implemented in PowerBuilder extension modules. |
pbext.h |
|
The PB_GetVM method is exported by the PowerBuilder VM and is used to pass the IPB_VM interface to the user. |
pbni.h |
Description
The IPB_Arguments and IPB_Value interfaces are used to pass values between the PowerBuilder VM and PowerBuilder extension modules. Each argument is represented by a pointer to the IPB_Value interface.
Methods
The IPB_Arguments interface has two methods, GetAt and GetCount.
Description
Returns a pointer to the IPB_Value interface representing an argument whose order in the list of arguments is indicated by a specified index.
Syntax
GetAt ( pbint index )
Return value
IPB_Value*
Examples
In the following code fragment, GetAt obtains the first value in the PBCallInfo structure. The value has been passed in from the calling function.
PBCallInfo ci; LPCSTR myPBNIObj = NULL; IPB_Value* pArg0 = ci->pArgs->GetAt(0); if (!pArg0->IsNull()) { pbstring t = pArg0->GetString(); if (t != NULL) myPBNIObj = session->GetString(t); }
See also
Description
Obtains the number of arguments in an instance of PBCallInfo.
Syntax
GetCount ( )
Return value
pbint.
Examples
This example uses GetCount in a FOR loop used to process different argument types:
int i; for (i=0; i < ci-> pArgs -> GetCount();i++) { pbuint ArgsType; if( ci -> pArgs -> GetAt(i) -> IsArray()) pArguments[i].array_val = ci -> pArgs -> GetAt(i) -> GetArray(); continue; } 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; } ...
See also
Description
The IPB_ResultSetAccessor interface is used to access result sets in DataWindow and DataStore objects.
Methods
The IPB_ResultSetAccessor interface has six methods:
Description
When you call the CreateResultSet function of interface IPB_Session, you need to pass an argument of type IPB_ResultSetAccessor. The AddRef function is called on that argument and the Release function is called when the pbobject is destroyed.
Syntax
AddRef ( )
Return value
None.
See also
Description
Obtains the number of columns.
Syntax
GetColumnCount ( )
Return value
Unsigned long.
Examples
This statement stores the number of columns in *numCols:
*numCols = d_rsAccessor->GetColumnCount();
See also
Description
Obtains a column's metadata. The column number of the first column is 1. Memory must be allocated for columnName before this function call. The pointer values can be null.
Syntax
GetColumnMetaData (unsigned long columnNum, LPTSTR columnName, pbvalue_type* type, unsigned long* width )
Argument |
Description |
---|---|
columnNum |
The number of the column for which you want to obtain metadata |
columnName |
The name of the specified column |
type |
A pointer to the type of the specified column |
width |
A pointer to the width of the specified column |
Return value
None.
Examples
This example gets the number of columns in a result set and allocates an array to hold the types of each column:
CRsltSet::CRsltSet(IPB_ResultSetAccessor* rsAccessor) :m_lRefCount (0), d_rsAccessor(rsAccessor) { rsAccessor->AddRef(); // for each column ULONG nNumColumns = d_rsAccessor->GetColumnCount(); d_arrColTypes = new USHORT[nNumColumns + 1]; for (ULONG nColumn=1; nColumn <= nNumColumns; ++nColumn) { // get the column type into the array pbvalue_type type; d_rsAccessor->GetColumnMetaData (nColumn, NULL, &type, NULL); d_arrColTypes[nColumn] = (USHORT)type; } }
See also
Description
Accesses the data in a cell. The first row is 1 and the first column is 1.
Syntax
GetItemData(unsigned long row, unsigned long col, IPB_RSItemData* data)
Argument |
Description |
---|---|
row |
The row number of the cell |
col |
The column number of the cell |
data |
A pointer to an IPB_RSItemData structure |
Return value
Boolean.
Examples
This example stores the data in the first row and column in the IPB_RSItemData structure sd:
d_rsAccessor->GetItemData(1, 1, &sd);
Usage
If the value of data is null, this function issues the callback data->SetNull. If the value is not null, it issues the callback data->SetData. For more information, examine the IPB_RSItemData interface.
See also
Description
Obtains the number of rows.
Syntax
GetRowCount ( )
Return value
Unsigned long.
Examples
This statement stores the number of rows in *numRows:
*numRows = d_rsAccessor->GetRowCount();
See also
Description
When you call the CreateResultSet function of interface IPB_Session, you need to pass an argument of type IPB_ResultSetAccessor. The AddRef function is called on that argument and the Release function is called when the pbobject is destroyed.
Syntax
Release ( )
Return value
None.
See also
Description
The IPB_RSItemData interface is used as an argument to the GetItemData function of IPB_ResultSetAccessor.
Methods
The IPB_RSItemData interface has two methods: SetData and SetNull.
Description
Sets the data in an IPB_RSItemData structure when the GetItemData function of IPB_ResultSetAccessor is called and the data value is not null.
Syntax
SetData(unsigned long len, void* data)
Return value
None.
Usage
If the cell datatype is:
-
string and decimal, the address points to a string
-
date, the address points to a PB_DateData structure
-
time, the address points to a PB_TimeData structure
-
datetime, the address points to a PB_DateTimeData structure
-
another datatype, the address points to data of the corresponding type
See also
Description
Sets the data in an IPB_RSItemData structure to null when the GetItemData function of IPB_ResultSetAccessor is called and the data value is not null.
Syntax
SetNull()
Return value
None.
See also
- AcquireArrayItemValue
- AcquireValue
- Add<type>Argument
- AddGlobalRef
- AddLocalRef
- ClearException
- CreateResultSet
- FindClass
- FindClassByClassID
- FindGroup
- FindMatchingFunction
- FreeCallInfo
- Get<type>ArrayItem
- Get<type>Field
- Get<type>GlobalVar
- Get<type>SharedVar
- GetArrayInfo
- GetArrayItemType
- GetArrayLength
- GetBlob
- GetBlobLength
- GetClass
- GetClassName
- GetCurrGroup
- GetDateString
- GetDateTimeString
- GetDecimalString
- GetEnumItemName
- GetEnumItemValue
- GetException
- GetFieldID
- GetFieldName
- GetFieldType
- GetGlobalVarID
- GetGlobalVarType
- GetMarshaler
- GetMethodID
- GetMethodIDByEventID
- GetNativeInterface
- GetNumOfFields
- GetPBAnyArrayItem
- GetPBAnyField
- GetPBAnyGlobalVar
- GetPBAnySharedVar
- GetProp
- GetResultSetAccessor
- GetSharedVarID
- GetSharedVarType
- GetString
- GetStringLength
- GetSuperClass
- GetSystemClass
- GetSystemGroup
- GetTimeString
- HasExceptionThrown
- HasPBVisualObject
- InitCallInfo
- InvokeClassFunction
- InvokeObjectFunction
- IsArrayItemNull
- IsAutoInstantiate
- IsFieldArray
- IsFieldNull
- IsFieldObject
- IsGlobalVarArray
- IsGlobalVarNull
- IsGlobalVarObject
- IsNativeObject
- IsSharedVarArray
- IsSharedVarNull
- IsSharedVarObject
- NewBlob
- NewBoundedObjectArray
- NewBoundedSimpleArray
- NewDate
- NewDateTime
- NewDecimal
- NewObject
- NewProxyObject
- NewString
- NewTime
- NewUnboundedObjectArray
- NewUnboundedSimpleArray
- PopLocalFrame
- ProcessPBMessage
- PushLocalFrame
- Release
- ReleaseArrayInfo
- ReleaseDateString
- ReleaseDateTimeString
- ReleaseDecimalString
- ReleaseResultSetAccessor
- ReleaseString
- ReleaseTimeString
- ReleaseValue
- RemoveGlobalRef
- RemoveLocalRef
- RemoveProp
- RestartRequested
- Set<type>ArrayItem
- Set<type>Field
- Set<type>GlobalVar
- Set<type>SharedVar
- SetArrayItemToNull
- SetArrayItemValue
- SetBlob
- SetDate
- SetDateTime
- SetDecimal
- SetFieldToNull
- SetGlobalVarToNull
- SetMarshaler
- SetProp
- SetSharedVarToNull
- SetString
- SetTime
- SetValue
- SplitDate
- SplitDateTime
- SplitTime
- ThrowException
- TriggerEvent
- UpdateField
Description
The IPB_Session interface is used to interoperate with PowerBuilder. An abstract interface, it defines methods for accessing PowerScript data, calling PowerScript functions, catching and throwing PowerScript exceptions, and setting a marshaler to convert PowerBuilder data formats to the user's communication protocol.
Methods
This table lists functions by category. Full descriptions in alphabetic order follow the table.
Purpose |
Method |
Description |
---|---|---|
Managing sessions |
Releases this IPB session. The IPB_Session object becomes invalid after the call. |
|
Managing object references |
Adds a global reference to the specified PowerBuilder object. |
|
Adds a local reference to the specified PowerBuilder object. |
||
Creates a new object of the specified type. |
||
Pops the current local reference frame from the current native method stack frame. |
||
Pushes a local reference frame onto the current native method stack frame. |
||
Removes a global reference to the specified PowerBuilder object. |
||
Removes a local reference to the specified PowerBuilder object. |
||
Managing shared properties |
Retrieves a pointer to the data value of a variable that has been registered as a shared property for the current IPB session. |
|
Removes the specified variable from the list of properties of the current IPB session. |
||
Adds a new variable to the list of properties of the current session or changes the value of an existing variable. |
||
Handling the PowerBuilder message queue |
Checks the PowerBuilder message queue and, if there is a message in the queue, attempts to process it. |
|
Handling exceptions |
Clears the current PowerBuilder exception object. |
|
Obtains the current thrown exception object. |
||
Checks for the existence of an exception that has been thrown but not cleared. |
||
Throws a PowerBuilder exception or inherited exception, replacing the existing exception if one exists. |
||
Passing arguments |
Adds an argument in a variable argument PowerBuilder call. |
|
Frees memory allocated by InitCallInfo. |
||
Initializes the PBCallInfo structure. |
||
Finding PowerBuilder classes and objects |
Searches for a group with a given name and group type in the current library list. |
|
Searches for a class with a given name within a given group. |
||
Searches for a class with a given name and a given ID. |
||
Returns the class handle of a PowerBuilder object. |
||
Returns the name of a class in lowercase. |
||
Returns the name of the current group. |
||
Returns the base class of a class, if any. |
||
Returns the system class handle of a PowerBuilder object. |
||
Returns the class that contains all the system global functions. |
||
Returns true if the specified class is an autoinstantiated class; otherwise returns false. |
||
Working with functions and events |
Finds a function that has the specified argument list. |
|
Returns the ID of the requested function. |
||
Returns the ID of the function that has a given predefined PowerBuilder event ID. |
||
Invokes system or user global functions. |
||
Invokes a class member function. |
||
Triggers a PowerBuilder event. |
||
Working with enumerated variables |
Obtains the name of an enumerated variable. |
|
Obtains the value of an enumerated variable. |
||
Working with global variables |
Returns the name of a global variable. |
|
Returns the datatype of a global variable. |
||
Returns the value of a global variable of a specific datatype. |
||
Obtains the value of a global variable of type Any. |
||
Returns true if the global variable contains an array, otherwise returns false. |
||
Returns true if the global variable contains a null value, otherwise returns false. |
||
Returns true if the global variable contains a pbobject, otherwise returns false. |
||
Sets the value of a global variable of a specific datatype. |
||
Sets the value of a shared variable to null. |
||
Working with shared variables |
Returns the name of a shared variable. |
|
Returns the datatype of a shared variable. |
||
Returns the value of a shared variable of a specific datatype. |
||
Obtains the value of a shared variable of type Any. |
||
Returns true if the shared variable contains an array, otherwise returns false. |
||
Returns true if the shared variable contains a null value, otherwise returns false. |
||
Returns true if the shared variable contains a pbobject, otherwise returns false. |
||
Sets the value of a shared variable of a specific datatype. |
||
Sets the value of a shared variable to null. |
||
Working with arrays |
Returns the value of an array item of a specific datatype. |
|
Obtains information about an array. |
||
Obtains the datatype of an item in an array. |
||
Returns the length of an array. |
||
Obtains the value of an array item of type Any. |
||
Returns true if the array item contains an array, otherwise returns false. |
||
Creates a bounded simple data array. |
||
Creates an unbounded simple data array. |
||
Creates a bounded PowerBuilder object or structure array. |
||
Creates an unbounded PowerBuilder object or structure data array. |
||
Releases memory returned by GetArrayInfo. |
||
Sets the value of an array item of a specific datatype. |
||
Sets the value of an array item to null. |
||
Working with strings |
Returns the length of a string in bytes without the terminator. |
|
Returns a pointer to the string passed in as an argument. |
||
Creates a new string. |
||
Releases the memory used by a string. |
||
Frees an existing string and assigns a new string value to it. |
||
Working with binary large objects |
Returns a pointer to the data buffer for a blob. |
|
Returns the length in bytes of blob data in a buffer. |
||
Creates a new blob and duplicates a buffer for the new blob data. |
||
Destroys the existing data in a blob and copies data into it from a buffer. |
||
Working with decimal values |
Converts decimal data in a pbdec object to a string. |
|
Allocates resources for a new decimal data object. |
||
Frees the memory acquired using GetDecimalString. |
||
Converts a string to a decimal. |
||
Working with date and time values |
Converts data in a pbdate object to a string. |
|
Converts data in a pbdatetime object to a string. |
||
Converts data in a pbtime object to a string. |
||
Creates a new pbdate data object. |
||
Creates a new pbdatetime data object. |
||
Creates a new pbtime data object. |
||
Frees the memory acquired using GetDateString. |
||
Frees the memory acquired using GetDateTimeString. |
||
Frees the memory acquired using GetTimeString. |
||
Resets the value of the specified pbdate object. |
||
Resets the value of the specified pbdatetime object. |
||
Resets the value of the specified pbtime object. |
||
Splits the specified pbdate object into a year, month, and day. |
||
Splits the specified pbdatetime object into a year, month, and day. |
||
Splits the specified pbtime object into a year, month, and day. |
||
Working with data values |
Clones the data in the PBCallInfo structure in an array item and resets the IPB_Value pointer. |
|
Clones the data in the PBCallInfo structure and resets the IPB_Value pointer. |
||
Frees the value acquired by the AcquireValue or AcquireArrayItemValue method. |
||
Sets the value of one IPB_Value object to the value of another IPB_Value object |
||
Working with fields |
Obtains the internal ID of a class instance variable. |
|
Obtains the name of the specified field. |
||
Obtains the datatype of a class instance variable. |
||
Obtains the number of fields in the specified class. |
||
Obtains the value of a variable of type Any. |
||
Obtains a pointer to the instance variable data for a specified variable. |
||
Returns true if the field contains an array, otherwise returns false. |
||
Returns true if the field contains a null value array, otherwise returns false. |
||
Returns true if the field contains a pbobject, otherwise returns false. |
||
A set of datatype-specific functions. Sets the value of an instance field of an object. |
||
A set of datatype-specific functions. Sets the value of an instance field of an object. |
||
Refreshes a visual property of a PowerBuilder object. |
||
Working with native classes |
Obtains a pointer to the interface of a native class. |
|
Determines whether a pbobject is an instance of a native class. |
||
Accessing result sets from DataWindows and DataStores |
Creates a result set object using a pointer to an IPB_ResultSetAccessor object. |
|
Obtains an interface through which you can read data from a result set. |
||
Releases the pointer obtained using GetResultSetAccessor. |
||
Working with marshaler extensions |
Obtains the marshaler object associated with a proxy object. |
|
Creates a proxy for a remote object. |
||
Sets a marshaler that will be used to invoke remote methods and convert PowerBuilder data formats to the user's communication protocol. |
Description
Clones the data in the PBCallInfo structure in an array item and resets the IPB_Value pointer.
Syntax
AcquireArrayItemValue( pbarray array, pblong dim[ ])
Argument |
Description |
---|---|
array |
A valid pbarray structure. |
dim |
A pblong array to hold the indexes of all dimensions of the array. The size of the array must equal the dimensions of array. |
Return value
IPB_Value*.
Examples
This FOR loop acquires the value of an item in an array and sets the value in another array:
for( i=1; i <= bound; i++) { dim[0]= i; ipv = Session -> AcquireArrayItemValue(refArg, dim); Session -> SetArrayItemValue(*i_array, dim, ipv); Session -> ReleaseValue(ipv); }
Usage
The AcquireArrayItemValue method enables you to retain the data in the PBCallInfo structure for a single array item.
The AcquireArrayItemValue method is independent of the type of the data but is most useful for acquiring the value of pointer values, such as pbvalue_string, pbvalue_blob, and so on. When you call FreeInfo, the data is not freed and the pointer returned by AcquireArrayItemValue is still valid.
When you no longer need the data, you must call the ReleaseValue method to free the data. Failing to do so causes a memory leak.
The PBVM clones a new IPB_Value and resets the existing one. If you attempt to get or acquire the original value, the value returned is zero or null until another IPB_Value is set to the value.
Working with large arrays
The processing that the AcquireArrayItemValue and ReleaseValue methods perform results in poor performance when handling large arrays. It is more efficient to get the type of the array and handle each type with appropriate type-specific functions.
See also
Description
Clones the data in the PBCallInfo structure and resets the IPB_Value pointer.
Syntax
AcquireValue ( IPBValue* value )
Return value
IPB_Value*.
Examples
The AcquireValue method is used to obtain a message argument value. Later, when the value is no longer needed, it is released using ReleaseValue to avoid memory leaks:
// Acquire a value MessageArg = session->AcquireValue ( ci->pArgs->GetAt(0) ); pbstring pbMessage = MessageArg->GetString() ; Message = (LPSTR)session->GetString(pbMessage) ; ... // Cleanup phase if (MessageArg) { Session->ReleaseValue ( MessageArg ) ; }
Usage
The AcquireValue method enables you to retain the data in the PBCallInfo structure. The AcquireValue method is independent of the type of the data but is most useful for acquiring the value of pointer values such as pbvalue_string, pbvalue_blob, and so on. When you call FreeInfo, the data is not freed and the pointer returned by AcquireValue is still valid.
If the value acquired is an array, the entire array is acquired. To acquire a single element in an array, use the AcquireItemValue method.
When you no longer need the data, you must call the ReleaseValue method to free the data. Failing to do so causes a memory leak.
The PBVM clones a new IPB_Value and resets the existing one. If you attempt to get or acquire the original value, the value returned is zero or null until another IPB_Value is set to the value.
See also
Description
Adds an argument of a specific type in a variable argument PowerBuilder call.
Syntax
AddArrayArgument ( PBCallInfo *ci, pbblob value, pbboolean IsNull ) AddBlobArgument ( PBCallInfo *ci, pbblob value, pbboolean IsNull ) AddBoolArgument ( PBCallInfo *ci, pbboolean value, pbboolean IsNull ) AddByteArgument ( PBCallInfo *ci, pbbyte value, pbboolean IsNull ) AddCharArgument ( PBCallInfo *ci, pbchar value, pbboolean IsNull ) AddDateArgument ( PBCallInfo *ci, pbdate value, pbboolean IsNull ) AddDateTimeArgument ( PBCallInfo *ci, pbdatetime value, pbboolean IsNull ) AddDecArgument ( PBCallInfo *ci, pbdec value, pbboolean IsNull ) AddDoubleArgument ( PBCallInfo *ci, pbdouble value, pbboolean IsNull ) AddIntArgument ( PBCallInfo *ci, pbint value, pbboolean IsNull ) AddLongArgument ( PBCallInfo *ci, pblong value, pbboolean IsNull ) AddLongLongArgument ( PBCallInfo *ci, pblonglong value, pbboolean IsNull ) AddObjectArgument ( PBCallInfo *ci, pbobject value, pbboolean IsNull ) AddPBStringArgument ( PBCallInfo *ci, pbstring value, pbboolean IsNull ) AddRealArgument ( PBCallInfo *ci, pbreal value, pbboolean IsNull ) AddStringArgument ( PBCallInfo *ci, LPCTSTR value, pbboolean IsNull ) AddTimeArgument ( PBCallInfo *ci, pbtime value, pbboolean IsNull ) AddUintArgument ( PBCallInfo *ci, pbuint value, pbboolean IsNull ) AddUlongArgument ( PBCallInfo *ci, pbulong value, pbboolean IsNull )
Argument |
Description |
---|---|
ci |
The PBCallInfo to which the argument is to be added. |
value |
The value to be added to the arguments array. |
IsNull |
Indicates whether the argument is null. The default is false. |
Return value
PBXRESULT. PBX_OK on success.
Examples
This code tests that adding an integer argument to a PBCallInfo structure ci works correctly:
long Cmy_pbni:: f_Retrieve(IPB_Session* session, pbint retrieve_args, pbobject dwobj) { pbclass cls; pbmethodID mid; PBCallInfo* ci = new PBCallInfo; pblong ret_val; PBXRESULT ret; cls = session-> GetClass(dwobj); mid = session-> GetMethodID (cls, "retrieve", PBRT_FUNCTION, "LAV"); if (mid == kUndefinedMethodID) return -1; session-> InitCallInfo(cls, mid, ci); ci-> pArgs-> GetAt(0)-> SetInt(retrieve_args); session-> AddIntArgument(ci, retrieve_args, false); ret = session->InvokeObjectFunction(dwobj, mid, ci); if (ret!= PBX_OK) ret_val= ret; else ret_val= ci-> returnValue-> GetLong(); session-> FreeCallInfo(ci); delete ci; return ret_val; }
Usage
This call is used in variable argument PowerBuilder calls, such as datawindow.retrieve(arg). After the call, the value returned by ci->pArgs->GetCount() increases by one.
See also
Description
Adds a global reference to the specified PowerBuilder object.
Syntax
AddGlobalRef (pbobject obj)
Return value
pbclass or null on error.
Examples
This example checks whether a return value is null, and if it is not, adds a global reference to it to the session:
if (ci-> returnValue-> IsNull()) ret_val = 0; else { ret_val = ci-> returnValue-> GetObject(); Session -> AddGlobalRef(ret_val); }
See also
Description
Adds a local reference to the specified PowerBuilder object.
Syntax
AddLocalRef (pbobject obj)
Return value
pbclass or null on error.
Examples
This example defines functions that add and remove local references:
void MyPBNIClass::reference() { d_session->AddLocalRef(d_pbobject); } void MyPBNIClass::unreference() { if(d_pbobject != NULL) d_session->RemoveLocalRef(d_pbobject); }
See also
Description
Clears the current PowerBuilder exception object.
Syntax
ClearException ()
Return value
None.
Usage
HasExceptionThrown returns false after a call to ClearException. If no exception has been thrown, this call has no effect.
See also
Description
Creates a result set object using a pointer to an IPB_ResultSetAccessor object.
Syntax
CreateResultSet (IPB_ResultSetAccessor* rs)
Return value
pbobject.
Examples
This example loads the PBVM and calls the f_ret and f_in functions in the custom class user object n_rs in the PBL pbrs.pbl. The PowerScript for the functions is shown after the C++ code:
#include "stdafx.h" #include "windows.h" #include "pbni.h" #include "vector" using std::vector; void main(int argc, char* argv[]) { HINSTANCE hinst = LoadLibrary("pbvm.dll"); typedef PBXRESULT (*P_PB_GetVM)(IPB_VM** vm); P_PB_GetVM getvm = (P_PB_GetVM)GetProcAddress(hinst, "PB_GetVM"); IPB_VM* pbvm; getvm(&pbvm); IPB_Session* session = NULL; vector<LPCSTR> ll(1); ll[0] = "pbrs.pbl"; pbvm->CreateSession("pbrs", &ll[0], 1, &session); pbgroup group = session->FindGroup("n_rs", pbgroup_userobject); if (group == NULL) return; pbclass cls = session->FindClass(group, "n_rs"); if (cls == NULL) return; pbobject obj = session->NewObject(cls); if (obj == NULL) return; pbmethodID mid = session->GetMethodID(cls, "f_ret", PBRT_FUNCTION, "Cresultset."); PBCallInfo ci; session->InitCallInfo(cls, mid, &ci); session->InvokeObjectFunction(obj, mid, &ci); // Use the result set returned from f_ret to // create an IPB_ResultSetAccessor rsa pbobject rs = ci.returnValue->GetObject(); IPB_ResultSetAccessor* rsa = session->GetResultSetAccessor(rs); // Create a result set object from rsa pbobject rsobj = session->CreateResultSet(rsa); // Call the f_in method mid = session->GetMethodID(cls, "f_in", PBRT_FUNCTION, "IRCresultset."); PBCallInfo ci1; session->InitCallInfo(cls, mid, &ci1); // Set the result set object rsobj as the // argument for f_in ci1.pArgs->GetAt(0)->SetObject(rsobj); session->InvokeObjectFunction(obj, mid, &ci1); session->FreeCallInfo(&ci); session->FreeCallInfo(&ci1); }
f_ret retrieves data from a database into a DataStore and generates a result set:
ResultSet rs DataStore ds Long sts Integer li_ret // Profile Demo Database V190 SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = & "ConnectString='DSN=Demo Database V190;UID=dba;PWD=sql'" connect using sqlca; ds = Create DataStore ds.DataObject = "" ds.DataObject = "d_rs" ds.SetTransObject(sqlca) w_main.dw_1.SetTransObject(sqlca) long ll_ret, rows, rows2 ll_ret = ds.Retrieve() ll_ret = w_main.dw_1.Retrieve() //ds.sharedata(w_main.dw_1) rows = ds.RowCount() rows2 = w_main.dw_1.RowCount() messagebox("info from f_ret", " row count is " & + string(rows) + " or " + string(rows2)) sts = ds.GenerateResultSet(rs) Return rs
f_in takes a result set, rs, as an argument and uses it to create a DataStore:
DataStore ds Int cnt, li_ret ds = Create DataStore ds.CreateFrom(rs) cnt = ds.RowCount() messagebox("info from f_in", "row count is " + string(cnt)) Return cnt
Usage
To use the IPB_ResultSetAccessor interface, load the PBVM, obtain a result set from a PowerBuilder application, and call GetResultSetAccessor on this result set to get an IPB_ResultSetAccessor interface object. You can then call the methods of this object to get information about the result set. You can also call CreateResultSet using this object as an argument to create a result set that you can return to PowerBuilder.
When you call CreateResultSet, the AddRef function of the IPB_ResultSetAccessor interface is called on the rs argument implicitly to add a reference to the interface pointer.
See also
Description
Searches for a class with a given name within a given group.
Syntax
FindClass(pbgroup group, LPCTSTR name)
Argument |
Description |
---|---|
group |
The handle of the group in which the class resides |
name |
The class name in lowercase |
Return value
pbclass or null on failure.
Examples
This example finds the group associated with the f_getrow function and uses the group to find the class:
group = session->FindGroup("f_getrow", pbgroup_function); if ( group==NULL ) return; cls = session->FindClass(group, "f_getrow"); if ( cls==NULL ) return;
Usage
This method searches for a PowerBuilder class with the given name in the given group. For example, in a window definition w_1, w_1 is a group, and w_1 and controls contained in it are all classes of group w_1.
See also
Description
Searches for a class with a given name and a given ID.
Syntax
FindClass(pbgroup group, pbint classID)
Argument |
Description |
---|---|
group |
The handle of the group in which the class resides |
classID |
The class name in lowercase |
Return value
pbclass or null on failure.
Usage
This method searches for a PowerBuilder class with the given name and the given ID.
See also
Description
Searches for a group with a given name and group type in the current library list.
Syntax
FindGroup(LPCTSTR name, pbgroup_type type)
Argument |
Description |
---|---|
name |
The group name in lowercase |
type |
An enumerated type defined in pbgroup_type |
Return value
pbgroup or null on failure.
Examples
This example finds the group associated with user_exception and uses the group to find the class:
group = session-> FindGroup("user_exception", pbgroup_userobject); if ( group==NULL ) return; cls = session->FindClass(group, "user_exception")
See also
Description
Finds a function that has the specified argument list.
Syntax
FindMatchingFunction(pbclass cls, LPCTSTR methodName, PBRoutineType rt, LPCTSTR readableSignature)
Argument |
Description |
---|---|
cls |
pbclass containing the method. |
methodName |
The string name of the method in lowercase. |
rt |
Type of the method: PBRT_FUNCTION for function or PBRT_EVENT for event. |
readableSignature |
A comma-separated string listing the types of the method's arguments. The return type of the method is not included in the string. See the Usage section for examples. |
Return value
pbmethodID.
Examples
This example returns the method ID of a function named uf_test that takes an integer and a double as arguments:
pbclass cls; pbmethodID mid; PBCallInfo* ci = new PBCallInfo; unsigned long ret_val; cls = Session -> GetClass(myobj); mid = Session -> FindMatchingFunction(cls, "uf_test", PBRT_FUNCTION, "int, double"); Session -> InitCallInfo(cls, mid, ci);
Usage
FindMatchingFunction provides an alternative to the GetMethodID function. It requires a list of the function's arguments (the readableSignature) instead of the signature obtained using the pbsig190 tool.
This table shows the readableSignature for each of several functions.
Function prototype |
Signature |
---|---|
void test1() |
"" |
int test2() |
"" |
string test3(int a, double b) |
"int, double" |
datastore test4(powerobject a[], double b[2 to 10, 1 to 7]) |
"powerobject[], double[2 to 10, 1 to 7]" |
int test5(readonly int a[10,20], ref long c[]) |
"readonly int[10,20], ref long[])" |
FindMatchingFunction does not check the access type of the function, so you can use it to obtain the method ID of a private function. GetMethodID cannot obtain the method ID of a private function.
See also
Description
Frees memory allocated by InitCallInfo.
Syntax
FreeCallInfo(PBCallInfo *ci)
Return value
None.
Examples
FreeCallInfo should be called when the PBCallInfo structure is no longer needed:
Session->InvokeObjectFunction(myobj, mid, ci); ret_val = ci.returnValue-> GetInt(); Session-> FreeCallInfo(ci); delete ci; return ret_val;
Usage
This method frees memory allocated by InitCallInfo but does not free the structure ci itself.
See also
Description
Obtains the value of an array item of a specified type.
Syntax
GetBlobArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetBoolArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetByteArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetCharArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetDateArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetDateTimeArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetDecArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetDoubleArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetIntArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull) GetLongArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetLongLongArrayItem (pbarray array, pblonglong dim[ ], pbboolean& IsNull) GetObjectArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetRealArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetStringArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetTimeArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetUintArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull ) GetUlongArrayItem ( pbarray array, pblong dim[ ], pbboolean& IsNull )
Argument |
Description |
---|---|
array |
A valid pbarray structure |
dim |
The dimension of the array item to be obtained |
IsNull |
Indicates whether the array item is null |
Return value
The value of the array item.
Examples
This example gets the value of an array item of type pbobject:
pbobject pPBObject = NULL; pbboolean bIsNull = 0; pblong dim[1]; dim[0] = pbl + 1; pPBObject = session->GetObjectArrayItem(array, dim, bIsNull);
See also
Description
A set of methods that gets the value of an instance field of an object.
Syntax
GetArrayField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetBlobField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetBoolField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetByteField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetCharField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetDateField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetDateTimeField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetDecField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetDoubleField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetIntField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetLongField( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetLongLongField( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetObjectField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetRealField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetStringField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetTimeField ( pbobject obj, pbfieldID fid, pbint value ) GetUintField ( pbobject obj, pbfieldID fid, pbboolean& isNull ) GetUlongField ( pbobject obj, pbfieldID fid, pbboolean& isNull )
Argument |
Description |
---|---|
obj |
The handle of the object whose field is to be accessed |
fid |
The field ID of the specified object |
isNull |
Indicates whether the field is null |
Return value
A predefined PBNI datatype that corresponds to the PowerBuilder datatype in the method name.
Examples
This example gets the value of a field of type pbstring:
pbboolean isNull; pbstring pstr = session->GetStringField(proxy, fid, isNull); if (pstr != NULL) { myclass = session->GetString(pstr); // process myclass }
See also
Description
A set of methods that gets the value of a global variable of a specific datatype.
Syntax
GetArrayGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetBlobGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetBoolGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetByteGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetCharGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetDateGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetDateTimeGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetDecGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetDoubleGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetIntGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetLongGlobalVar( pbfieldID fid, pbboolean& isNull ) GetLongLongGlobalVar( pbfieldID fid, pbboolean& isNull ) GetObjectGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetRealGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetStringGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetTimeGlobalVar ( pbfieldID fid, pbint value ) GetUintGlobalVar ( pbfieldID fid, pbboolean& isNull ) GetUlongGlobalVar ( pbfieldID fid, pbboolean& isNull )
Argument |
Description |
---|---|
fid |
The field ID of the global variable |
isNull |
Indicates whether the variable is null |
Return value
A predefined PBNI datatype that corresponds to the PowerBuilder datatype in the method name.
Examples
This code gets the value of a global variable of datatype long using its field ID:
fid = session -> GetGlobalVarID("l_gvar"); l_val = session -> GetLongGlobalVar(fid, isNull); session -> SetLongGlobalVar(fid, l_val + 1);
See also
Description
A set of methods that gets the value of a shared variable of a specific datatype.
Syntax
GetArraySharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetBlobSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetBoolSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetByteSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetCharSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetDateSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetDateTimeSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetDecSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetDoubleSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetIntSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetLongSharedVar( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetLongLongSharedVar( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetObjectSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetRealSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetStringSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetTimeSharedVar ( pbgroup group, pbfieldID fid, pbint value ) GetUintSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull ) GetUlongSharedVar ( pbgroup group, pbfieldID fid, pbboolean& isNull )
Argument |
Description |
---|---|
group |
The group whose shared variable is to be accessed |
fid |
The field ID of the shared variable |
isNull |
Indicates whether the variable is null |
Return value
A predefined PBNI datatype that corresponds to the PowerBuilder datatype in the method name.
Examples
This code gets the value of a shared variable of type integer:
curGroup = session -> GetCurrGroup(); fid = session -> GetSharedVarID(curGroup, "i_svar"); if (fid == 0xffff) { MessageBox(NULL, "Illegal fid!", "default", MB_OK); return; } i_val = session-> GetIntSharedVar(curGroup, fid, isNull); session-> SetIntSharedVar(curGroup, fid, i_val+1);
See also
Description
Obtains information about an array.
Syntax
GetArrayInfo(pbarray array)
Return value
PBArrayInfo*.
Examples
This IF-ELSE statement populates a PBArrayInfo structure if the array in the first value of a PBCallInfo structure is not null:
if ( !(ci->pArgs->GetAt(0)->IsNull()) ) { array = ci->pArgs->GetAt(0)->GetArray(); pArrayInfo = session->GetArrayInfo (array); pArrayItemCount = session->GetArrayLength(array); } else { // NULL array pArrayItemCount = 0; }
Usage
If the array is an unbounded array, the bounds information in PBArrayInfo is undetermined. The returned PBArrayInfo must be freed later by ReleaseArrayInfo.
See also
Description
Obtains the datatype of an item in an array.
Syntax
GetArrayItemType( pbarray array, pblong dim[ ])
Argument |
Description |
---|---|
array |
A valid pbarray structure. |
dim |
A pblong array to hold the indexes of each dimension of the array. The size of the array must equal the dimensions of array. |
Return value
pbuint.
See also
Description
Obtains the length of an array.
Syntax
GetArrayLength(pbarray array)
Return value
pblong.
Examples
This IF-ELSE statement populates a PBArrayInfo structure. If the array in the first value of a PBCallInfo structure is not null, it sets the value of the pArrayItemCount variable to the length of the array:
if ( !(ci->pArgs->GetAt(0)->IsNull()) ) { array = ci->pArgs->GetAt(0)->GetArray(); pArrayInfo = session->GetArrayInfo (array); pArrayItemCount = session->GetArrayLength(array); } else { // NULL array pArrayItemCount = 0; }
See also
Description
Returns a pointer to the data buffer for a blob.
Syntax
GetBlob(pbblob bin)
Return value
void*.
Examples
In this CASE clause, the value returned from GetBlob is cast to the LPCTSTR variable pStr. If it is not null, the return value in the PBCallInfo structure is set to the value of the blob:
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); Session -> ReleaseValue(retVal); } break;
See also
Description
Returns the length in bytes of blob data in a buffer.
Syntax
GetBlobLength (pbblob bin)
Return value
pblong.
Examples
In this example, the IPB_Value GetBlob function is used to get a blob value from the PBCallInfo structure. The length of the blob is used as an argument to the NewBlob function:
PBCallInfo* ci = new PBCallInfo; pbblob ret_val; pblong bloblen; ret_val = ci.returnValue-> GetBlob(); bloblen = Session-> GetBlobLength(ret_val); ret_val = Session-> NewBlob (Session->GetBlob(ret_val), bloblen);
See also
Description
Returns the class handle of a PowerBuilder object. This function is most frequently used to obtain a class handle for use with the GetMethodID function.
Syntax
GetClass (pbobject obj)
Return value
pbclass or null on error.
Examples
In this example, GetClass is used to obtain the class of a variable of type UserData so that the class can be used as an argument to the GetMethodID function:
BOOL CALLBACK CFontEnumerator::EnumFontProc ( LPLOGFONT lplf, LPNEWTEXTMETRIC lpntm, DWORD FontType, LPVOID userData ) { UserData* ud = (UserData*)userData; pbclass clz = ud->session->GetClass(ud->object); pbmethodID mid = ud->session->GetMethodID (clz, "onnewfont", PBRT_EVENT, "IS"); PBCallInfo ci; ud->session->InitCallInfo(clz, mid, &ci); pbstring str = ud->session->NewString (lplf->lfFaceName); ci.pArgs->GetAt(0)->SetPBString(str); ud->session->TriggerEvent(ud->object, mid, &ci); pbint ret = ci.returnValue->GetInt(); ud->session->FreeCallInfo(&ci); return ret == 1 TRUE : FALSE; }
See also
Description
Returns the name of a class in lowercase.
Syntax
GetClassName(pbclass cls)
Return value
LPCTSTR.
Examples
This example gets the name of a class and sets the size of the variable stLength to the length of the returned string plus 1:
LPCTSTR myClassName = session->GetClassName( myClass ); size_t stLength = strlen( (LPSTR)myClassName ) + 1;
Usage
When you have finished using the name, call the ReleaseString method to free the memory acquired.
See also
Description
Obtains the name of the current group.
Syntax
GetCurrGroup( )
Return value
pbgroup or null on failure.
Examples
This example gets the name of the current group and uses it to obtain the identifier of a shared variable, get the shared variable's value, and reset the shared variable's value:
curGroup = session -> GetCurrGroup(); fid = session -> GetSharedVarID(curGroup, "i_svar"); if (fid == 0xffff) { MessageBox(NULL, "Illegal fid!", "default", MB_OK); return; } i_val = session-> GetIntSharedVar(curGroup, fid, isNull); session-> SetIntSharedVar(curGroup, fid, i_val+1);
See also
Description
Converts data in a pbdate object to a string.
Syntax
GetDateString(pbdate date)
Return value
LPCTSTR.
See also
Description
Converts data in a pbdatetime object to a string.
Syntax
GetDateTimeString(pbdatetime datetime)
Return value
LPCTSTR.
See also
Description
Converts decimal data in a pbdec object to a string.
Syntax
GetDecimalString(pbdec dec)
Return value
LPCTSTR.
Examples
This code checks whether a value in the PBCallInfo structure is null. If it is not, it sets the value in the pArguments array to the value in PBCallInfo:
case pbvalue_dec: if (ci->pArgs->GetAt(i)->IsNull()) { pArguments[i].dec_val = Session->NewDecimal(); Session->SetDecimal(pArguments[i].dec_val, "1.0"); } else pArguments[i].dec_val = ci->pArgs->GetAt(i)->GetDecimalString(); break;
See also
Description
Obtains the name of an enumerated variable.
Syntax
GetEnumItemName(LPCTSTR enumName, long enumItemValue)
Return value
LPCTSTR.
Usage
When you have finished using the name, call the ReleaseString method to free the memory acquired.
See also
Description
Obtains the value of an enumerated variable.
Syntax
GetEnumItemValue(LPCTSTR enumName, LPCTSTR enumItemName)
Return value
Long.
Examples
This example gets the numeric value for the boolean! enumerated value, then uses it to return the string value:
pblong lType = session->GetEnumItemValue("object", boolean" ); // returns 138 LPCTSTR szEnum = session->GetEnumItemName( "object", lType ); // returns "boolean"
Usage
GetEnumItemValue and GetEnumItemName support enumerated types. They allow you to convert the name of an enumerated value, a string with an appended exclamation mark (!), to an integer value, and vice versa.
The ! character must be omitted
When you use these functions, the enumItemName should not use the appended exclamation mark (!) character.
To return an enumerated value from an extension to PowerScript, you must use the SetLong function to set the value of the enumerated variable into IPB_Value. Using SetInt or SetShort fails. However, you can use GetInt or GetShort as well as GetLong to obtain the enumerated variable's value, assuming the value is in the appropriate range. For example, if you attempt to use GetInt to obtain a value that is more than 32767, the returned value is truncated.
See also
Description
Obtains the current thrown exception object.
Syntax
GetException ()
Return value
pbobject.
Examples
This code gets the current exception object, clears the exception, and gets the class of the exception object:
pbclass cls; pbobject ex; ... ex = session-> GetException(); session-> ClearException(); cls = session-> GetClass(ex);
See also
Description
Obtains the internal ID of a class instance variable.
Syntax
GetFieldID(pbclass cls, LPCTSTR fieldName)
Argument |
Description |
---|---|
cls |
The class in which the field resides |
fieldName |
The instance member name, in lowercase |
Return value
pbfieldID or 0xffff if a field ID cannot be found.
Examples
This function obtains the identifier of a class's visible field, if it exists, and uses it to set the value of the field:
void CallBack::f_setvisible(IPB_Session* session, pbobject dwobj) { pbclass cls; IPB_Value* pv; pbfieldID fid; pbstring strtmp; bool isTrue; pbboolean isNull; cls = session-> GetClass(dwobj); fid = session-> GetFieldID(cls, "visible"); if (fid == kUndefinedFieldID) return; isTrue = session-> GetBoolField(dwobj, fid, isNull); if (isTrue) session -> SetBoolField(dwobj, fid, false); else session -> SetBoolField(dwobj, fid, true); return ; }
Usage
GetFieldID is one of a set of functions that allows native code to access the fields of Java objects and get and set their values. You use GetFieldID to retrieve the value of a field, specifying the class name and the field name. The field ID returned can be used as an argument to the related functions.
See also
Description
Obtains the name of the specified field.
Syntax
GetFieldName(pbclass cls, pbfieldID fid)
Argument |
Description |
---|---|
cls |
The class that defines the field |
fid |
The internal ID of the class instance variable |
Return value
LPCTSTR.
The field name of the specified field. If an incorrect field ID is specified, this function returns null.
Usage
When you have finished using the name, call the ReleaseString method to free the memory acquired.
See also
Description
Obtains the datatype of a field declared by a class.
Syntax
GetFieldType(pbclass cls, pbfieldID fid)
Argument |
Description |
---|---|
cls |
The class that defines the field |
fid |
The internal ID of the class instance variable |
Return value
pbint.
A simple datatype defined in the list of pbvalue_type enumerated types, such as pbvalue_int. See PBNI enumerated types.
Examples
This statement gets the type of the specified field ID:
pbint pbfieldType = session->GetFieldType(cls, fid);
See also
Description
Returns the internal ID of a global variable.
Syntax
GetGlobalVarID(LPCTSTR name)
Return value
pbfieldID or null on failure.
Examples
This example gets the internal identifier of a long variable and uses it to get and set a global variable:
fid = session -> GetGlobalVarID("l_gvar"); l_val = session -> GetLongGlobalVar(fid, isNull); session -> SetLongGlobalVar(fid, l_val + 1);
See also
Description
Obtains the datatype of a global variable.
Syntax
GetGlobalVarType(pbfieldID fid)
Return value
pbuint.
A simple datatype defined in the list of pbvalue_type enumerated types.
Examples
This code tests getting and setting a global integer variable using the field ID fid:
fid = session -> GetGlobalVarID("i_gvar"); if (session -> GetGlobalVarType(fid) == pbvalue_int) { i_val=session -> GetIntGlobalVar(fid,isNull); session -> SetIntGlobalVar(fid,i_val+1); }
See also
Description
Obtains the marshaler object associated with a proxy object.
Syntax
GetMarshaler(pbproxyObject obj)
Return value
IPBX_Marshaler*.
Examples
This code creates a Java marshaler object and associates it with a proxy. Later, GetMarshaler is used to get the marshaler object:
// Create JavaMarshaler JavaMarshaler* marshaler = new JavaMarshaler(env, proxy, jobj); // Associate the JavaMarshaler with the // PowerBuilder proxy session-> SetMarshaler(proxy, marshaler); ci-> pArgs-> GetAt(0)-> SetObject(proxy); ci-> returnValue-> SetLong(kSuccessful); return PBX_OK; ... // Get the marshaler IPBX_Marshaler* pIPBX_Marshaler = NULL; pIPBX_Marshaler =(IPBX_Marshaler*)session -> GetMarshaler(proxy);
See also
Description
Returns the ID of the requested method.
Syntax
GetMethodID(pbclass cls, LPCTSTR methodName, PBRoutineType rt, LPCTSTR signature, pbboolean publicOnly)
Argument |
Description |
---|---|
cls |
pbclass containing the function. |
methodName |
The string name of the method in lowercase. |
rt |
Type of the method: PBRT_FUNCTION for function or PBRT_EVENT for event. |
signature |
Internal signature of the PowerBuilder function, used to identify polymorphic methods in one class. Obtained with the pbsig190 tool. If the signature is a null string (" "), the first method found with the name methodName is returned. |
publicOnly |
A boolean that determines whether only public methods are searched (true) or all methods are searched (false). The default is true. |
Return value
pbMethodID of the method or kUndefinedMethodID on error.
Examples
This function uses GetMethodID to obtain the identifier (mid) of the onnewfont function so that the identifier can be used to initialize the PBCallInfo structure and call the function:
BOOL CALLBACK CFontEnumerator::EnumFontProc ( LPLOGFONT lplf, LPNEWTEXTMETRIC lpntm, DWORD FontType, LPVOID userData ) { UserData* ud = (UserData*)userData; pbclass clz = ud->session->GetClass(ud->object); pbmethodID mid = ud->session->GetMethodID(clz, "onnewfont", PBRT_EVENT, "IS"); PBCallInfo ci; ud->session->InitCallInfo(clz, mid, &ci); pbstring str = ud->session-> NewString(lplf->lfFaceName); ci.pArgs->GetAt(0)->SetPBString(str); ud->session->TriggerEvent(ud->object, mid, &ci); pbint ret = ci.returnValue->GetInt(); ud->session->FreeCallInfo(&ci); return ret == 1 TRUE : FALSE; }
Usage
The GetMethodID function is used to obtain the ID of a method so you can use it to invoke functions and trigger events.
See also
Description
Returns the ID of the method that has a given predefined PowerBuilder event ID.
Syntax
GetMethodIDByEventID(pbclass cls, LPCTSTR eventID)
Argument |
Description |
---|---|
cls |
pbclass containing the method |
eventID |
A PowerBuilder predefined event string, such as pbm_bnclicked |
Return value
pbMethodID of the method or kUndefinedMethodID on error.
Examples
This statement obtains the ID of the event identified by the name pbm_lbuttonup:
pbmethodID mid = d_session->GetMethodIDByEventID(clz, "pbm_lbuttonup");
See also
Description
Obtains a pointer to the interface of a native class.
Syntax
GetNativeInterface(pbobject obj)
Return value
IPBX_UserObject.
Examples
This example invokes the function f_retrieve in the native class Cmy_pbni to retrieve a DataWindow object:
long f_retrieve(IPB_Session* session, pbint iarg, pbobject dwObj, pbobject extObj) { Imy_pbni* pImy_pbni = NULL; pblong lRet; if (session -> IsNativeObject(extObj) ) { pImy_pbni = (Imy_pbni*) session -> GetNativeInterface(extObj); lRet = pImy_pbni-> f_Retrieve(session, iarg, dwObj); } return lRet; }
Usage
Use this method in conjunction with IsNativeObject to obtain a direct reference to the IPBX_UserObject associated with a native class in the same PowerBuilder extension. The class and its methods can then be accessed directly.
See also
Description
Returns the number of fields in the specified class.
Syntax
GetNumOfFields(pbclass cls)
Return value
pbulong.
Examples
This code gets the numbers of fields in the class clz:
pbclass clz = d_session->GetClass(d_pbobj); pbulong nf = d_session->GetNumOfFields(clz);
See also
Description
Obtains the value of a global variable of type Any.
Syntax
GetPBAnyArrayItem( pbarray array, pblong dim[], pbboolean& isNull )
Argument |
Description |
---|---|
array |
A valid pbarray structure. |
dim |
A pblong array to hold the indexes of each dimension of the array. The size of the array must equal the dimensions of array. |
isNull |
Indicates whether the variable is null |
Return value
IPB_Value*.
Usage
See GetPBAnyField.
See also
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 value
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.
IPB_Value holds a reference to the original 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.
See also
Description
Obtains the value of a global variable of type Any.
Syntax
GetPBAnyGlobalVar( pbfieldID fid, pbboolean& isNull )
Return value
IPB_Value*.
Usage
See GetPBAnyField.
See also
Description
Obtains the value of a shared variable of type Any.
Syntax
GetPBAnySharedVar( pbgroup group, pbfieldID fid, pbboolean& isNull )
Argument |
Description |
---|---|
group |
The group to which the variable belongs |
fid |
The field ID of the variable |
isNull |
Indicates whether the variable is null |
Return value
IPB_Value*.
Usage
See GetPBAnyField.
See also
Description
Retrieves a pointer to the data value of a variable that has been registered as a shared property for the current IPB session.
Syntax
GetProp(LPCTSTR name)
Return value
Void*. If the variable does not exist, returns null.
Examples
See SetProp.
Usage
The variable's name must first be registered with the session using the SetProp function.
See also
Description
Obtains an interface through which you can read data from a result set.
Syntax
GetResultSetAccessor (pbobject rs)
Return value
IPB_ResultSetAccessor
Examples
This example gets a result set, rs, from the return value of a PowerScript function and uses it to create an IPB_ResultSetAccessor object, rsa:
pbobject rs = ci.returnValue->GetObject(); IPB_ResultSetAccessor* rsa = session->GetResultSetAccessor(rs);
See also
Description
Returns the internal ID of a shared variable.
Syntax
GettSharedVarID(pbgroup group, LPCTSTR fieldname)
Argument |
Description |
---|---|
group |
The group to which the shared variable belongs |
fieldname |
The name of the field that contains the shared variable, in lowercase |
Return value
pbfieldID.
Returns 0xffff if the ID cannot be found.
Examples
This code uses GetSharedVarID to obtain the field ID of a shared variable, then uses that ID to obtain the value of the variable:
curGroup = session -> GetCurrGroup(); fid = session -> GetSharedVarID(curGroup,"i_svar"); if (fid == 0xffff) { MessageBox(NULL, "Illegal fid!", "default", MB_OK); return; } i_val = session -> GetIntSharedVar(curGroup, fid, isNull);
See also
Description
Obtains the datatype of the specified shared variable.
Syntax
GetSharedVarType ( pbgroup group, pbfieldID fid )
Argument |
Description |
---|---|
group |
The group to which the shared variable belongs |
fid |
The internal field ID of the shared variable |
Return value
pbuint.
A simple datatype defined in the list of pbvalue_type enumerated types.
Examples
This example gets the field ID of a shared variable, then uses that ID to get the type of the shared variable:
pbuint pbvaltype; curGroup = session -> GetCurrGroup(); fid = session -> GetSharedVarID(curGroup,"i_svar"); pbvaltype = session -> GetSharedVarType(curGroup, fid);
See also
Description
Returns a pointer to the string passed in as an argument.
Syntax
GetString (pbstring* string)
Return value
LPCTSTR.
Examples
This example uses the IPB_Value GetString function to obtain a string value from the PBCallInfo structure. If the string is not null, the IPB_Session GetString function sets the value of the proxyname string to a pointer to the returned value:
string proxyName; { pbstring pn = ci->pArgs->GetAt(2)->GetString(); if (pn == NULL) { ci->returnValue->SetLong(kInvalidProxyName); return PBX_OK; } else { proxyName = session->GetString(pn); } }
Usage
When you have finished using the string, call the ReleaseString method to free the memory acquired.
See also
Description
Returns the length of a string in bytes without the terminator.
Syntax
GetStringLength (pbstring string)
Return value
pblong.
Examples
These statements set the value of a pblong variable to the length of a string:
pblong long_val; pbstring str_val; long_val = session-> GetStringLength( str_val );
See also
Description
Returns the ancestor class of the specified class, if any.
Syntax
GetSuperClass(pbclass cls)
Return value
pbclass or 0 if the class has no ancestor.
Examples
These statements get the class of an object in the PBCallInfo structure, the ancestor class of that class, and then the name of the ancestor class:
pbclass cls, cls_parent; LPCSTR clsname; cls = Session-> GetClass(ci-> pArgs-> GetAt(0)-> GetObject()); cls_parent = Session-> GetSuperClass(cls); clsname = Session-> GetClassName(cls_parent);
See also
Description
Returns the first system class that the input class inherits from.
Syntax
GetSystemClass (pbclass cls)
Return value
pbclass or null on error.
See also
Description
Returns a PowerBuilder internal system group.
Syntax
GetSystemGroup()
Return value
pbclass or null on error.
Usage
GetSystemGroup returns the PowerBuilder internal system group, which contains all the system types such as PowerObject, NonVisualObject, Structure, Window, CommandButton, and so on. You can use this system group to obtain a system class. You might need to call PowerScript functions in the PowerBuilder extension. To achieve this, you first need to get the pbclass that the PowerScript function class resides in. This code gets the PowerBuilder system function class:
pbgroup sysGroup = session->GetSystemGroup(); pbclass sysFuncClass = session->FindClass(sysGroup, "SystemFunctions");
After you get the system class, you can obtain the method ID of a PowerScript function by calling FindMatchingFunction, and then you can invoke the PowerScript function.
See also
Description
Converts data in a pbtime object to a string.
Syntax
GetTimeString(pbtime time)
Return value
LPCTSTR.
See also
Description
Checks for the existence of an exception that has been thrown but not cleared.
Syntax
HasExceptionThrown()
Return value
pbboolean.
Returns true if a PowerBuilder exception has been thrown but not cleared.
Examples
This example tests whether an exception has been thrown so it can be handled and cleared:
try { session->InvokeObjectFunction(pbobj, mid, &ci); // Was PB exception thrown if (session-> HasExceptionThrown()) { // Handle PB exception session-> ClearException(); } }
See also
Description
Determines whether any PowerBuilder windows, visible or hidden, are still in existence.
Syntax
HasPBVisualObject()
Return value
pbboolean.
Returns true if any PowerBuilder windows are still alive. If any windows that are not response windows are still alive, the PowerBuilder application returns immediately unless you manually add a message loop.
Examples
This example is similar to the example for RestartRequested, but it includes a call to HasPBVisualObject that opens a message loop if the return value is true:
PBXRESULT PB_MyWinAppRunner::RunApplication() { PBXRESULT res; pbboolean restart = FALSE; do { res = StartApplication(); if (res == PBX_OK) // Process message dispatch { if ( GetSession()->HasPBVisualObject() ) { MSG msg; while ( GetMessage(&msg, 0, 0, 0) ) { TranslateMessage(&msg); DispatchMessage(&msg); if ( !GetSession()->HasPBVisualObject() ) break; } } } else break; restart = GetSession()->RestartRequested(); if (restart) RecreateSession(); } while (restart); return CleanApplication(); }
Usage
RestartRequested and HasVisualPBObject are used in the implementation of the IPB_VM RunApplication function. You no longer need to use an external message loop to check for Windows messages when you call the RunApplication function as you did in versions of PBNI prior to PowerBuilder 10.5.
See also
Description
Initializes the PBCallInfo structure.
Syntax
InitCallInfo(pbclass cls, pbmethodID mid, PBCallInfo *ci)
Argument |
Description |
---|---|
cls |
The pbclass containing the method |
mid |
The pbMethodID returned by GetMethodID |
ci |
A pointer to a preallocated PBCallInfo structure |
Return value
PBXRESULT. Returns PBX_OK on success, and PBX_E_INVALID_ARGUMENT on failure.
Examples
This example shows the implementation of a TriggerEvent function in a visual class. It takes an event name as an argument, obtains the class and method ID needed to initialize the PBCallInfo structure, triggers the event, and frees the PBCallInfo structure:
void CVisualExt::TriggerEvent(LPCTSTR eventName) { pbclass clz = d_session->GetClass(d_pbobj); pbmethodID mid = d_session->GetMethodID(clz, eventName, PBRT_EVENT, "I"); PBCallInfo ci; d_session->InitCallInfo(clz, mid, &ci); d_session->TriggerEvent(d_pbobj, mid, &ci); d_session->FreeCallInfo(&ci); }
Usage
On return, this method allocates enough space for the arguments, and then initializes the arguments and return value. You must set appropriate values in the PBCallInfo structure. Note that the structure itself must have been allocated before the call.
See also
Description
Invokes system or user global functions.
Syntax
InvokeClassFunction(pbclass cls, pbmethodID mid, PBCallInfo *ci)
Argument |
Description |
---|---|
cls |
The class that contains the global function. If this is a system function, cls is obtained with GetSystemFunctionsClass; otherwise, it is obtained with FindGroup and FindClass, with the function name as the group/class name. |
mid |
The pbMethodID returned by GetMethodID. |
ci |
A pointer to a preallocated PBCallInfo structure. |
Return value
PBXRESULT. Returns PBX_OK for success, or one of the following for failure:
PBX_E_INVALID_ARGUMENT
PBX_E_INVOKE_METHOD_INACCESSABLE
PBX_E_INVOKE_WRONG_NUM_ARGS
PBX_E_INVOKE_REFARG_ERROR
PBX_E_INVOKE_METHOD_AMBIGUOUS
PBX_E_INVOKE_FAILURE
PBX_E_INVOKE_FAILURE
Examples
This example gets the PowerBuilder system class and uses it to invoke the double function:
cls = session-> GetSystemClass(); mid = session-> GetMethodID (cls, "double", PBRT_FUNCTION, "DA"); session-> InitCallInfo(cls, mid, ci); ci->pArgs -> GetAt(0) -> SetPBString(mystr); session -> InvokeClassFunction(cls, mid, ci);
Usage
On return, this method allocates enough spaces for the arguments, and then initializes arguments and return value. You must set appropriate values in the PBCallInfo structure. Note that the structure itself must have been allocated before the call.
See also
Description
Invokes a class member method.
Syntax
InvokeObjectFunction(pbobject obj, pbmethodID mid, PBCallInfo *ci)
Argument |
Description |
---|---|
obj |
The pbobject containing the method |
mid |
The pbMethodID returned by GetMethodID |
ci |
A pointer to a preallocated PBCallInfo structure |
Return value
PBXRESULT. Returns PBX_OK for success, or one of the following for failure:
PBX_E_INVALID_ARGUMENT
PBX_E_INVOKE_METHOD_INACCESSABLE
PBX_E_INVOKE_WRONG_NUM_ARGS
PBX_E_INVOKE_REFARG_ERROR
PBX_E_INVOKE_METHOD_AMBIGUOUS
PBX_E_INVOKE_FAILURE
PBX_E_INVOKE_FAILURE
Examples
This code invokes the DataWindow Update function and returns its integer return value:
pbclass cls; pbmethodID mid; PBCallInfo* ci = new PBCallInfo; pbint ret_val; cls = session->GetClass(dwobj); mid = session->GetMethodID (cls, "Update", PBRT_FUNCTION, "I"); session->InitCallInfo(cls, mid, ci); session->InvokeObjectFunction(dwobj, mid, ci); ret_val = ci.returnValue->GetInt(); session->FreeCallInfo(ci); delete ci; return ret_val;
See also
Description
Returns true if the array item contains a null value; otherwise it returns false.
Syntax
IsArrayItemNull( pbarray array, pblong dim[ ])
Argument |
Description |
---|---|
array |
A valid pbarray structure that you want to check for a null-valued array item. |
dim |
A pblong array to hold the indexes of each dimension of the array. The size of the array must equal the dimensions of array. |
Return value
pbboolean.
See also
Description
Returns true if the specified class is an autoinstantiated class; otherwise it returns false.
Syntax
IsAutoInstantiate(pbclass)
Return value
pbboolean.
Description
Returns true if the field of the specified object is an array; otherwise it returns false.
Syntax
IsFieldArray(pbclass cls, pbfield fid)
Argument |
Description |
---|---|
cls |
A valid class handle for the class whose field is to be accessed |
fid |
The field ID of the specified object |
Return value
pbboolean.
Examples
This code tests whether the field identified by fid is an array, and if so, gets the array value:
fid = session->GetFieldID(cls, "arr_val"); if (session->IsFieldArray(cls, fid)) { arr_val=session->GetArrayField(myobj, fid, isNull); ...
See also
Description
Returns true if the field of the specified object is a null value; otherwise it returns false.
Syntax
IsFieldNull(pbobject obj, pbfield fid)
Argument |
Description |
---|---|
obj |
A valid object handle for the object whose field is to be accessed |
fid |
The field ID of the specified object |
Return value
pbboolean.
Examples
These statements test whether the field identified by fid is null:
fid = session -> GetFieldID(cls, "i_val"); if (session -> IsFieldNull(myobj, fid))
See also
Description
Returns true if the field of the specified object is an object; otherwise it returns false.
Syntax
IsFieldObject(pbclass cls, pbfield fid)
Argument |
Description |
---|---|
cls |
A valid class handle for the class whose field is to be accessed |
fid |
The field ID of the specified object |
Return value
pbboolean.
Examples
These statements test whether the field identified by fid is an object:
fid = session -> GetFieldID(cls, "obj_val"); if (session -> IsFieldObject(myobj, fid))
See also
Description
Returns true if the global variable contains an array; otherwise it returns false.
Syntax
IsGlobalVarArray(pbfield fid)
Return value
pbboolean.
Examples
These statements test whether the field identified by fid is a global variable array:
fid = session -> GetGlobalVarID("arr_gvar"); if (session -> IsGlobalVarArray(fid)) { arr_val=session -> GetArrayGlobalVar(fid, isNull); ...
See also
Description
Returns true if the global variable contains a null value; otherwise it returns false.
Syntax
IsGlobalVarNull( pbfield fid)
Return value
pbboolean.
Examples
These statements test whether the field identified by fid is a global variable array:
fid = session -> GetGlobalVarID("arr_gvar"); if (session -> IsGlobalVarArray(fid)) { arr_val=session -> GetArrayGlobalVar(fid, isNull); ...
See also
Description
Returns true if the global variable contains an object; otherwise it returns false.
Syntax
IsGlobalVarObject( pbfield fid)
Return value
pbboolean.
Examples
These statements test whether the field identified by fid is a global variable object. If it is, its value is set to another global variable object:
fid = session -> GetGlobalVarID("obj2_gvar"); if (session -> IsGlobalVarObject(fid)) { obj_val = session -> GetObjectGlobalVar(fid, isNull); cls = session -> GetClass(obj_val); fid = session -> GetFieldID(cls, "text"); s_val = session -> GetStringField(obj_val, fid, isNull); mystr = session -> GetString(s_val); // Set the value of obj2_gvar to obj1_gvar fid = session -> GetGlobalVarID("obj1_gvar"); session -> SetObjectGlobalVar(fid, obj_val); }
See also
Description
Determines whether a pbobject is an instance of a native class.
Syntax
IsNativeObject(pbobject obj)
Return value
pbboolean.
Examples
The f_getrow function uses IsNativeObject to test whether extObj is a native class. If so, it gets the native interface and invokes the f_getrowcount function in the other class:
long f_getrow(IPB_Session* session, pbobject dwObj, pbobject extObj) { long lRet; Imy_pbni* pImy_pbni = NULL; IPBX_NonVisualObject* pp=NULL; if (session -> IsNativeObject(extObj) ) { pp = (IPBX_NonVisualObject*) session -> GetNativeInterface(extObj); pImy_pbni = static_cast<Imy_pbni*>(pp); lRet = pImy_pbni-> f_GetRowCount(session, dwObj); } return lRet; }
Usage
Use this method in conjunction with GetNativeInterface to obtain a direct reference to the IPBX_UserObject associated with another native class, so that the class and its methods can be accessed directly.
See also
Description
Returns true if the shared variable contains an array; otherwise it returns false.
Syntax
IsSharedVarArray(pbgroup group, pbfield fid)
Argument |
Description |
---|---|
group |
The group whose shared variable is to be accessed |
fid |
The field ID of the shared variable |
Return value
pbboolean.
See also
Description
Returns true if the shared variable contains a null value; otherwise it returns false.
Syntax
IsSharedVarNull(pbgroup group, pbfield fid)
Argument |
Description |
---|---|
group |
The group whose shared variable is to be accessed |
fid |
The field ID of the shared variable |
Return value
pbboolean.
See also
Description
Returns true if the shared variable contains an object; otherwise it returns false.
Syntax
IsSharedVarObject(pbgroup group, pbfield fid)
Argument |
Description |
---|---|
group |
The group whose shared variable is to be accessed |
fid |
The field ID of the shared variable |
Return value
pbboolean.
See also
Description
Creates a new blob and duplicates a buffer for the new blob data.
Syntax
NewBlob (const void* bin, pblong len)
Argument |
Description |
---|---|
bin |
A void pointer that points to the source buffer |
len |
The length in bytes of the data in the buffer |
Return value
pbblob.
Examples
If the blob value in the PBCallInfo structure is null, this code creates a new blob value with four bytes in the pArguments array; otherwise, it sets the blob value in the pArguments array to the value in the PBCallInfo structure:
if (ci->pArgs->GetAt(i)->IsNull()) pArguments[i].blob_val = Session->NewBlob("null", 4); else pArguments[i].blob_val = ci->pArgs->GetAt(i)->GetBlob();
Usage
The buffer containing the new blob data is freed when PopLocalFrame is called.
See also
Description
Creates a bounded PowerBuilder object or structure array.
Syntax
NewBoundedObjectArray(pbclass cls, pbuint dimension, PBArrayInfo::ArrayBound* bounds)
Argument |
Description |
---|---|
cls |
A valid class handle of the type of PowerBuilder object or structure array to be created |
dimension |
A number greater than one that indicates the dimension of the array to be created |
bounds |
An array containing the upper and lower boundaries of the array to be created |
Return value
pbarray or null on failure.
Examples
int size; pbarray pbin_a; PBArrayInfo* ai; PBXRESULT ret; pbclass cls; pbgroup group; size = sizeof(PBArrayInfo) + sizeof(PBArrayInfo::ArrayBound); ai = (PBArrayInfo*)malloc(size); ai-> bounds[0].upperBound=2; ai-> bounds[0].lowerBound=1; ai-> bounds[1].upperBound=2; ai-> bounds[1].lowerBound=1; ai-> numDimensions=2; // Create new array pbin_a group = session-> FindGroup("w_main", pbgroup_window); if (group==NULL) return; cls = session->FindClass(group, "commandbutton"); if( cls==NULL) return; pbin_a = session->NewBoundedObjectArray(cls, ai-> numDimensions, ai-> bounds);
See also
Description
Creates a bounded simple data array.
Syntax
NewBoundedSimpleArray(pbuint type, pbuint dimension, PBArrayInfo::ArrayBound* bounds)
Argument |
Description |
---|---|
type |
An enumerated variable of type pbvalue_* indicating the type of simple unbounded array to be created |
dimension |
A number greater than one that indicates the dimension of the array to be created |
bounds |
An array containing the upper and lower boundaries of the array to be created |
Return value
pbarray or null on failure.
See also
Description
Creates a new pbdate data object.
Syntax
NewDate()
Return value
pbdate.
Examples
This example tests whether a date value exists, and, if it does not, it creates a new pbdate object and sets its value to the first day in January, 1900:
if (ci->pArgs->GetAt(0)->IsNull()) { pArguments[i].date_val = Session->NewDate(); Session->SetDate(pArguments[i].date_val, 1900,1,1); // Date: 1900-01-01 isNull[i]=true; } else { pArguments[i].date_val = ci->pArgs->GetAt(i)->GetDate(); isNull[i]=false; }
Usage
The initial value is 1900-1-1.
See also
Description
Creates a new pbdatetime data object.
Syntax
NewDateTime()
Return value
pbdatetime.
Examples
This example tests whether a date/time value exists, and, if it does not, it creates a new pbdate object and sets its value to the beginning of January, 1900:
if (ci->pArgs->GetAt(i)->IsNull()) { pArguments[i].datetime_val=Session->NewDateTime(); Session->SetDateTime(pArguments[i].datetime_val, 1900, 1 , 1, 1, 1, 1); // Datetime: // 1900-01-01 01:01:01 } else { pArguments[i].datetime_val = ci->pArgs->GetAt(i)->GetDateTime(); }
Usage
The initial value is 1900-1-1 0:0:0.0.
See also
Description
Allocates resources for a new decimal data object.
Syntax
NewDecimal( )
Return value
pbdec or null on failure.
Examples
if (ci->pArgs->GetAt(i)->IsNull()) { pArguments[i].dec_val=Session->NewDecimal(); Session->SetDecimal(pArguments[i].dec_val,"1.0"); } else pArguments[i].dec_val = ci->pArgs->GetAt(i)->GetDecimal();
See also
Description
Creates a new object of the specified type.
Syntax
NewObject(pbclass cls)
Return value
pbobject of the given class or structure.
Examples
pbclass cls; pbobject ex; pbgroup group; group = session-> FindGroup ("user_exception", pbgroup_userobject); if (group==NULL) return; cls = session->FindClass(group, "user_exception"); if (group==NULL) return; ex = session->NewObject(cls);
Usage
The returned object's life cycle is restricted to the current frame unless AddGlobalRef is called on the object.
See also
Description
Creates a proxy for a remote object. The proxy is used to extend the network protocol in PowerBuilder.
Syntax
NewProxyObject(pbclass cls)
Return value
pbproxyobject.
Examples
This example creates a new proxy object, creates a marshaler, and associates the marshaler with the proxy object:
pbproxyObject proxy = session->NewProxyObject(cls); if (proxy == NULL) { ci->returnValue->SetLong(kFailToCreateProxy); return PBX_OK; } // Create MyMarshaler MyMarshaler* marshaler = new MyMarshaler (env, proxy, obj); // Associate MyMarshaler with the proxy session->SetMarshaler(proxy, marshaler); ci->pArgs->GetAt(0)->SetObject(proxy); ci->returnValue->SetLong(kSuccessful); return PBX_OK;
See also
Description
Creates a new string.
Syntax
NewString(LPCTSTR)
Return value
pbstring.
Examples
pbclass cls; cls = session->GetSystemFunctionsClass(); if( cls == NULL ) { ret_val = session->NewString("null"); return ret_val; }
Usage
The returned string is destroyed when PopLocalFrame is called.
See also
Description
Creates a new pbtime data object.
Syntax
NewTime()
Return value
pbtime.
Examples
These statements split a time into hours, minutes, and seconds, and then use the resulting values to set the value of a new time object:
Session->SplitTime(ci.returnValue->GetTime(), &hh, &mm, &ss); ret_val = Session-> NewTime(); Session-> SetTime(ret_val, hh, mm, ss);
Usage
The initial value is 0:0:0.0.
See also
Description
Creates an unbounded PowerBuilder object or structure data array.
Syntax
NewUnboundedObjectArray(pbclass cls)
Argument |
Description |
---|---|
cls |
A valid class handle of the type of PowerBuilder object or structure array to be created |
Return value
pbarray or null on failure.
Usage
An unbounded array can have only one dimension, so no dimension information is needed.
See also
Description
Creates an unbounded simple data array.
Syntax
NewUnboundedSimpleArray(pbuint type)
Argument |
Description |
---|---|
type |
An enumerated variable of type pbvalue_* indicating the type of simple unbounded array to be created |
Return value
pbarray or null on failure.
Examples
This example creates an unbounded simple data array of the type returned by the getDataType method, which returns a string of the form dt_type. Most of the case statements have been removed for the sake of brevity:
if (d_returnType.isArray()) { returnValue.l = env->CallObjectMethodA(obj, mid, values.get()); pbarray v; switch(d_returnType.getDataType()) { case dt_boolean: v = session->NewUnboundedSimpleArray (pbvalue_boolean); break; case dt_short: v = session->NewUnboundedSimpleArray (pbvalue_int); break; // CASE statements omitted ... default: v = session->NewUnboundedSimpleArray (pbvalue_any); break; } ci->returnValue->SetArray(v);
Usage
An unbounded array can have only one dimension, so no dimension information is needed.
See also
Description
Pops the current local reference frame from the current native method stack frame, removing all local references to the objects added in that local frame. All the pbobject, pbstring, and pbdecimal variables created by calling NewDecimal, NewObject, or NewString in the current frame are destroyed automatically.
Syntax
PopLocalFrame()
Return value
None.
See also
Description
Checks the PowerBuilder message queue and, if there is a message in the queue, attempts to process it.
Syntax
ProcessPBMessage()
Return value
pbboolean.
Returns true if a PowerBuilder message was processed, and false otherwise.
Examples
This message loop in a WinMain function processes a PowerBuilder message if a message has been received and an IPB session is running:
try { while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); // Call to ProcessPBMessage if (session) session->ProcessPBMessage(); }
This overloaded WindowProc function in an MFC application processes a PowerBuilder message:
LRESULT CCallPBVCtrl::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { d_session->ProcessPBMessage(); return CDialog::WindowProc(message, wParam, lParam); }
Usage
Each time this function is called, it attempts to retrieve a message from the PowerBuilder message queue and process it. It is similar to the PowerBuilder Yield function; however, ProcessPBMessage processes only one message at a time, and it processes only PowerBuilder messages. The Yield function also processes Windows messages.
Use this function when PowerBuilder windows or visual controls are called from C++ applications or from extensions to ensure that events posted to the PowerBuilder message queue are processed.
If the function is not inserted in the C++ application in a way that results in it being called repeatedly, posted events are not processed in the PowerBuilder application.
For most applications, ProcessPBMessage can be inserted in a message loop in the WinMain function. If you use Microsoft Foundation Classes (MFC), you cannot modify the built-in message loop. To ensure that the ProcessPBMessage function is called repeatedly, you can overload the CWnd::WindowProc function and insert ProcessPBMessage into the overloaded function.
Description
Pushes a local reference frame onto the current native method stack frame. A local frame is analogous to a scope in C++.
Syntax
PushLocalFrame()
Return value
None.
See also
Description
Releases the current IPB_Session. The IPB_Session object becomes invalid after the call.
Syntax
Release()
Return value
None.
Examples
This example shows a call to Release. The example checks whether there is a valid session object before attempting to release it:
if (pIPB_ObjectFactory) { pIPB_ObjectFactory->Release(); pIPB_ObjectFactory = NULL; }
Description
Releases memory returned by GetArrayInfo.
Syntax
ReleaseArrayInfo(PBArrayInfo* pbarrayinfo)
Return value
PBXRESULT. PBX_OK for success.
Examples
This example shows how ReleaseArrayInfo should be called when memory allocated by GetArrayInfo is no longer needed:
PBArrayInfo* ai; ... session->ReleaseArrayInfo(ai);
Usage
If the array is an unbounded array, the bounds information in PBArrayInfo is undetermined.
See also
Description
Frees the memory acquired using GetDateString.
Syntax
ReleaseDateString(LPCTSTR string)
Return value
None.
See also
Description
Frees the memory acquired using GetDateTimeString.
Syntax
ReleaseDateTimeString(LPCTSTR string)
Return value
None.
See also
Description
Frees the memory acquired using GetDecimalString.
Syntax
ReleaseDecimalString(LPCTSTR string)
Return value
None.
See also
Description
Releases the pointer obtained using GetResultSetAccessor.
Syntax
ReleaseResultSetAccessor (IPB_ResultSetAccessor* rs)
Return value
None.
Examples
This statement releases the IPB_ResultSetAccessor object rsa:
Session->ReleaseResultSetAccessor(rsa);
Usage
When you call ReleaseResultSetAccessor, the Release function of the IPB_ResultSetAccessor interface is called on the rs argument to release the interface pointer.
See also
Description
Frees the memory acquired using GetString, GetClassName, GetFieldName, or GetEnumItemName.
Syntax
ReleaseString(LPCTSTR string)
Return value
None.
Examples
The following example gets a pointer to each of two strings passed in as arguments, concatenates them in a new string, then releases the memory used by the original strings:
pbstring psppcls:: f_add_string(IPB_Session* session, pbstring arg1, pbstring arg2) { LPCTSTR pStr1,pStr2; TCHAR tmp[100]; pbstring ret; pStr1=session-> GetString(arg1); pStr2=session-> GetString(arg2); _tcscpy(tmp,pStr1); _tcscat(tmp,pStr2); ret = session -> NewString(tmp); session-> ReleaseString(pStr1); session-> ReleaseString(pStr2); return ret ; }
Usage
Do not use this function to release a string obtained using GetDateString, GetTimeString, GetDateTimeString, or GetDecimalString. Each of these Get methods has a corresponding Release method.
See also
Description
Frees the memory acquired using GetString.
Syntax
ReleaseTimeString(LPCTSTR string)
Return value
None.
See also
Description
Frees the IPB_Value acquired using AcquireValue or AcquireArrayItemValue.
Syntax
ReleaseValue(IPB_Value* value)
Return value
None.
Examples
The AcquireValue method is used to obtain a message argument value. Later, when the value is no longer needed, it is released using ReleaseValue to avoid memory leaks:
// Acquire a value MessageArg = session->AcquireValue ( ci->pArgs->GetAt(0) ); pbstring pbMessage = MessageArg->GetString() ; Message = (LPSTR)session->GetString(pbMessage) ; ... // Cleanup phase if (MessageArg) { Session->ReleaseValue ( MessageArg ) ; }
Usage
When you no longer need the data acquired using the AcquireValue or AcquireArrayItemValue method, you must call the ReleaseValue method to free the data. Failing to do so causes a memory leak.
Warning
Do not use ReleaseValue to release a value that was not acquired using AcquireValue or AcquireArrayItemValue. If you do, the PowerBuilder VM might crash.
See also
Description
Removes a global reference to the specified PowerBuilder object.
Syntax
RemoveGlobalRef (pbobject obj)
Return value
None.
Examples
void MyPBNIClass::reference() { d_session->AddGlobalRef(d_pbobject); } void MyPBNIClass::unreference() { if(d_pbobject != NULL) d_session -> RemoveGlobalRef(d_pbobject); }
See also
Description
Removes a local reference to the specified PowerBuilder object.
Syntax
RemoveLocalRef (pbobject obj)
Return value
None.
See also
Description
Removes the specified variable from the list of properties of the current IPB session. You must free the memory to which the property points.
Syntax
RemoveProp(LPCTSTR name)
Return value
None.
Examples
These statements remove prop_name from the list of variables associated with the session and delete the pointer created to point to the variables value:
session -> RemoveProp(prop_name); delete SetValue;
Usage
SetProp enables you to use a variable value throughout an IPB session. Use RemoveProp to remove the variable from the list of variables associated with the session when it is no longer needed. You must also free the memory associated with the variable.
See also
Description
Determines whether the PowerBuilder system function Restart has been called.
Syntax
HasPBVisualObject()
Return value
pbboolean.
Returns true when the PowerBuilder system function Restart is called. When RestartRequested returns true, you should destroy the existing IPB_Session object and create a new one to restart the application.
Examples
In the following example, StartApplication, RecreateSession, and CleanApplication are functions of the PB_MyConsoleAppRunner class. StartApplication is similar to the IP_VM RunApplication function, but it uses an existing session. RecreateSession releases the current session and creates a new one. CleanApplication triggers the application's Close event and releases resources. In the example, RestartRequested is called in a DO loop to test whether the PowerBuilder Restart function has been called. If it has, the RecreateSession function is called:
PBXRESULT PB_MyConsoleAppRunner::RunApplication() { PBXRESULT res; pbboolean restart = FALSE; do { res = StartApplication(); if (res != PBX_OK) break; restart = GetSession()->RestartRequested(); if (restart) RecreateSession(); } while (restart); return CleanApplication(); }
Usage
RestartRequested and HasVisualPBObject are used in the implementation of the IPB_VM RunApplication function. You no longer need to use an external message loop to check for Windows messages when you call the RunApplication function as you did in versions of PBNI prior to PowerBuilder 10.5.
See also
Description
Assigns a value to an array item of a specific type.
Syntax
SetBlobArrayItem ( pbarray array, pblong dim[ ], pbblob value ) SetBoolArrayItem ( pbarray array, pblong dim[ ], pbboolean value ) SetByteArrayItem ( pbarray array, pblong dim[ ], pbbyte value ) SetCharArrayItem ( pbarray array, pblong dim[ ], pbchar value ) SetDateArrayItem ( pbarray array, pblong dim[ ], pbdate value ) SetDateTimeArrayItem ( pbarray array, pblong dim[ ], pbdatetime value ) SetDecArrayItem ( pbarray array, pblong dim[ ], pbdec value ) SetDoubleArrayItem ( pbarray array, pblong dim[ ], pbdouble value ) SetIntArrayItem ( pbarray array, pblong dim[ ], pbint value ) SetLongArrayItem ( pbarray array, pblong dim[ ], pblong value ) SetLongLongArrayItem ( pbarray array, pblonglong dim[ ], pblong value ) SetObjectArrayItem ( pbarray array, pblong dim[ ], pbobject obj ) SetPBStringArrayItem ( pbarray array, pblong dim[ ], pbstring value ) SetRealArrayItem ( pbarray array, pblong dim[ ], pbreal value ) SetStringArrayItem ( pbarray array, pblong dim[ ], LPCTSTR value ) SetTimeArrayItem ( pbarray array, pblong dim[ ], pbtime value ) SetUintArrayItem ( pbarray array, pblong dim[ ], pbuint value ) SetUlongArrayItem ( pbarray array, pblong dim[ ], pbulong value )
Argument |
Description |
---|---|
array |
A valid pbarray handle. |
dim |
A pblong array to hold indexes of each dimension. The number of dimensions must equal the number of dimensions of the array. |
value |
The new value of the array item. |
Return value
PBXRESULT. PBX_OK for success.
If the index exceeds the bounds of a bounded array, it returns PBX_E_ARRAY_INDEX_OUTOF_BOUNDS.
If the data passed in does not match the datatype of the array, it returns PBX_E_MISMATCHED_DATA_TYPE.
Examples
This example creates a new unbounded simple array. In the FOR loop, application-specific code (not shown here) gets array values, which are then added to the array using SetPBStringArrayItem:
pblong dim[1]; char * cstr; pbuint numDimensions = 1; PBArrayInfo::ArrayBound bound; bound.lowerBound = 1; bound.upperBound = size; d_pbarray = d_session->NewBoundedSimpleArray (pbvalue_string, numDimensions, &bound); for (int i = 1; i <= size; i++ ) { dim[0] = i; // add application-specific code here to // get array value pbstring pValue = d_session->NewString(cstr); d_session->SetPBStringArrayItem(d_pbarray, dim, pValue); delete [] cstr; } pbv.SetArray(d_pbarray);
Usage
This method assigns the IPB_Value pointed to by the value argument to the array item in the same way that the IPB_Value Set<type> method sets a value.
See also
Description
A set of methods that set a new value in an instance field of an object.
Syntax
SetArrayField ( pbobject obj, pbfieldID fid, pbarray value ) SetBlobField ( pbobject obj, pbfieldID fid, pbblob value ) SetBoolField ( pbobject obj, pbfieldID fid, pbboolean value ) SetByteField ( pbobject obj, pbfieldID fid, pbbyte value ) SetCharField ( pbobject obj, pbfieldID fid, pbchar value ) SetDateField ( pbobject obj, pbfieldID fid, pbdate value ) SetDateTimeField ( pbobject obj, pbfieldID fid, pbdatetime value ) SetDecField ( pbobject obj, pbfieldID fid, pbdec value ) SetDoubleField ( pbobject obj, pbfieldID fid, pbdouble value ) SetIntField ( pbobject obj, pbfieldID fid, pbint value ) SetLongField ( pbobject obj, pbfieldID fid, pblong value ) SetLongLongField ( pbobject obj, pbfieldID fid, pblonglong value ) SetObjectField ( pbobject obj, pbfieldID fid, pbobject value ) SetPBStringField ( pbobject obj, pbfieldID fid, pbstring value ) SetRealField ( pbobject obj, pbfieldID fid, pbreal value ) SetStringField ( pbobject obj, pbfieldID fid, LPCTSTR value ) SetTimeField ( pbobject obj, pbfieldID fid, pbtime value ) SetUintField ( pbobject obj, pbfieldID fid, pbuint value ) SetUlongField ( pbobject obj, pbfieldID fid, pbulong value )
Argument |
Description |
---|---|
obj |
The handle of the object whose field is to be accessed |
fid |
The field ID of the specified object |
value |
The value to be set |
Return value
PBX_RESULT.
Examples
These statements set a new string value in a string field:
pbstring str = session->NewString(d_message.c_str()); if (str != NULL) session->SetPBStringField(d_pbobj, d_fidMsg, str);
Usage
When you change any visual property of a PowerBuilder object by calling Set<type>field functions, the property is changed but the property is not refreshed in the graphical user interface. UpdateField refreshes the visual properties of PowerBuilder objects. You must call UpdateField explicitly when changing any visual property with the Set<type>field functions.
See also
Description
A set of methods that set the value of a global variable of a specific datatype.
Syntax
SetArrayGlobalVar ( pbfieldID fid, pbarray value ) SetBlobGlobalVar ( pbfieldID fid, pbblob value ) SetBoolGlobalVar ( pbfieldID fid, pbboolean value ) SetByteGlobalVar ( pbfieldID fid, pbbyte value ) SetCharGlobalVar ( pbfieldID fid, pbchar value ) SetDateGlobalVar ( pbfieldID fid, pbdate value ) SetDateTimeGlobalVar ( pbfieldID fid, pbdatetime value ) SetDecGlobalVar ( pbfieldID fid, pbdec value ) SetDoubleGlobalVar ( pbfieldID fid, pbdouble value ) SetIntGlobalVar ( pbfieldID fid, pbint value ) SetLongGlobalVar( pbfieldID fid, pblong value ) SetLongLongGlobalVar( pbfieldID fid, pblonglong value ) SetObjectGlobalVar ( pbfieldID fid, pbobject value ) SetPBStringGlobalVar ( pbfieldID fid, pbstring value ) SetRealGlobalVar ( pbfieldID fid, pbreal value ) SetStringGlobalVar ( pbfieldID fid, LPCTSTR value ) SetTimeGlobalVar ( pbfieldID fid, pbtime value ) SetUintGlobalVar ( pbfieldID fid, pbuint value ) SetUlongGlobalVar ( pbfieldID fid, pbulong value )
Return value
PBX_RESULT.
Examples
This shows how to add 1 to the value of a global variable:
fid = session -> GetGlobalVarID("l_gvar"); l_val = session -> GetLongGlobalVar(fid, isNull); session -> SetLongGlobalVar(fid, l_val + 1);
See also
Description
A set of methods that set the value of a shared variable of a specific datatype.
Syntax
SetArraySharedVar ( pbgroup group, pbfieldID fid, pbarray value ) SetBlobSharedVar ( pbgroup group, pbfieldID fid, pbblob value ) SetBoolSharedVar ( pbgroup group, pbfieldID fid, pbboolean value ) SetByteSharedVar ( pbgroup group, pbfieldID fid, pbbyte value ) SetCharSharedVar ( pbgroup group, pbfieldID fid, pbchar value ) SetDateSharedVar ( pbgroup group, pbfieldID fid, pbdate value ) SetDateTimeSharedVar ( pbgroup group, pbfieldID fid, pbdatetime value ) SetDecSharedVar ( pbgroup group, pbfieldID fid, pbdec value ) SetDoubleSharedVar ( pbgroup group, pbfieldID fid, pbdouble value ) SetIntSharedVar ( pbgroup group, pbfieldID fid, pbint value ) SetLongSharedVar( pbgroup group, pbfieldID fid, pblong value ) SetLongLongSharedVar( pbgroup group, pbfieldID fid, pblonglong value ) SetObjectSharedVar ( pbgroup group, pbfieldID fid, pbobject value ) SetPBStringSharedVar ( pbgroup group, pbfieldID fid, pbstring value ) SetRealSharedVar ( pbgroup group, pbfieldID fid, pbreal value ) SetStringSharedVar ( pbgroup group, pbfieldID fid, LPCTSTR value ) SetTimeSharedVar ( pbgroup group, pbfieldID fid, pbtime value ) SetUintSharedVar ( pbgroup group, pbfieldID fid, pbuint value ) SetUlongSharedVar ( pbgroup group, pbfieldID fid, pbulong value )
Argument |
Description |
---|---|
group |
The group whose shared variable is to be accessed |
fid |
The field ID of the shared variable |
value |
The value to be set |
Return value
PBX_RESULT.
See also
Description
Sets the value of an array item to a null value.
Syntax
SetArrayItemToNull( pbarray array, pblong dim[ ])
Argument |
Description |
---|---|
array |
A valid pbarray structure in which you want to set an array item to null. |
dim |
A pblong array to hold the indexes of each dimension of the array. The size of the array must equal the dimensions of array. |
Return value
pbboolean.
See also
Description
Sets the value of an array item to the value of an IPB_Value.
Syntax
SetArrayItemValue( pbarray array, pblong dim[ ], IPB_Value* src)
Argument |
Description |
---|---|
array |
A valid pbarray structure in which you want to set an array item to null. |
dim |
A pblong array to hold the indexes of each dimension of the array. The size of the array must equal the dimensions of array. |
src |
The value to which the array item is to be changed. |
Return value
None.
Examples
This code sets the value of each item in an array:
for( i=1; i <= bound; i++) { dim[0]= i; ipv = Session -> AcquireArrayItemValue(refArg, dim); Session -> SetArrayItemValue(*i_array, dim, ipv); Session -> ReleaseValue(ipv); }
Usage
The SetArrayItemValue method does not verify that the datatype of the replacement value matches the datatype of the original value.
See also
Description
Destroys the existing data in a blob and copies data into it from a buffer.
Syntax
SetBlob (pbblob blb, const void* bin, pblong len)
Argument |
Description |
---|---|
blb |
A valid pbblob object whose value is to be reset |
bin |
A pointer to the source buffer |
len |
The length in bytes of the data in the buffer |
Return value
PBXRESULT. Returns PBX_OK for success or PBX_E_INVALID_ARGUMENT if the new blob value is invalid; otherwise, returns PBX_E_OUTOF_MEMORY.
Usage
A deep copy is performed. The existing value is destroyed first, and then the contents of the bin argument are copied into a new value.
See also
Description
Resets the value of the specified pbdate object.
Syntax
SetDate (pbdate date, pbint year, pbint month, pbint day)
Argument |
Description |
---|---|
date |
The pbdate object to be reset |
year |
A year in the range 1000 to 3000 |
month |
A month in the range 1 to 12 |
day |
A day in the range 1 to 31 |
Return value
PBX_RESULT. PBX_OK for success or PBX_E_INVALID_ARGUMENT if the new date is invalid.
Examples
This example sets the date to March 12, 1938:
session->SetDate(date_val, 1938, 3, 12);
Usage
If the parameters are invalid, the date is reset to 1900-1-1.
See also
Description
Resets the value of the specified pbdatetime object.
Syntax
SetDate (pbdatetime dt, pbint year, pbint month, pbint day, pbint hour, pbint minute, pbdouble second)
Argument |
Description |
---|---|
dt |
The pbdatetime object to be reset |
year |
A year in the range 1000 to 3000 |
month |
A month in the range 1 to 12 |
day |
A day in the range 1 to 31 |
hour |
An hour in the range 0 to 23 |
minute |
A minute in the range 0 to 59 |
second |
A second in the range 0 to 59.999999 |
Return value
PBX_RESULT. PBX_OK for success or PBX_E_INVALID_ARGUMENT if the new datetime is invalid.
Examples
This example sets the datetime value to August 19, 1982 at 10:30:45.10:
session->SetDate(date_val, 1982, 8, 19, 10, 30, 45.1);
Usage
If the parameters are invalid, the datetime value is reset to 1900-1-1 0:0:0.0.
See also
Description
Sets the value of a decimal variable to decimal data in a string.
Syntax
SetDecimal(pbdec dec, LPCTSTR dec_str)
Argument |
Description |
---|---|
dec |
The decimal data object to be set |
dec_str |
The string containing the data to be converted to a decimal |
Return value
PBXRESULT. PBX_OK for success.
Examples
This example uses the IPB_Session SetDecimal method to set the value of a variable of type pbdec, then uses the IPB_Value SetDecimal method to set the return value in the PBCallInfo structure:
pbdec pbdecRet = NULL; LPTSTR lpDecValueToReturn = NULL; ... pbdecRet = session -> NewDecimal(); session -> SetDecimal( pbdecRet, (LPCTSTR)lpDecValueToReturn); ci -> returnValue -> SetDecimal(pbdecRet);
Usage
If the string contains invalid data, the decimal value is set to 0.0.
See also
Description
Sets the value of the specified field to null.
Syntax
SetFieldToNull(pbobject obj, pbfield fid)
Return value
None.
See also
Description
Sets the value of the specified global variable to null.
Syntax
SetGlobalVarToNull(pbobject obj, pbfield fid)
Return value
None.
See also
Description
Sets a marshaler that will be used to invoke remote methods and convert PowerBuilder data formats to the user's communication protocol.
Syntax
SetMarshaler(pbproxyObject obj, IPBX_Marshaler* marshaler)
Argument |
Description |
---|---|
obj |
An object of type pbproxyObject to be used as a proxy for a remote object that was created using NewProxyObject |
marshaler |
A class inherited from IPBX_Marshaler |
Return value
None.
Examples
This example creates a JavaMarshaler class and associates it with a proxy object:
// Create JavaMarshaler JavaMarshaler* marshaler = new JavaMarshaler (env, proxy, jobj); // Associate the JavaMarshaler with the PB proxy session->SetMarshaler(proxy, marshaler); ci->pArgs->GetAt(0)->SetObject(proxy); ci->returnValue->SetLong(kSuccessful); return PBX_OK;
Usage
The SetMarshaler function associates an object of type IPBX_Marshaler with a PBProxy object. It is possible to associate multiple marshaler objects with a single proxy object. It is also possible to associate one marshaler object with multiple proxy objects. Neither of these is good coding practice and should be avoided.
Before calling SetMarshaler, you can call the IPB_Session GetMarshaler function to obtain an existing marshaler object associated with a given proxy object, and then destroy the existing marshaler object before associating a new marshaler with the proxy.
When a proxy object is destroyed, it calls the associated marshaler object's Destroy method. If multiple proxy objects are associated with a single marshaler object, you need to implement some form of reference counting. Otherwise, the marshaler object is destroyed when the first associated proxy object is destroyed, and subsequent calls to the marshaler object's Destroy method, when other associated proxy objects are destroyed, will throw exceptions.
To avoid these issues, there should be a one-to-one relationship between marshaler and proxy objects.
See also
Description
Adds a new variable to the list of properties of the current session or changes the value of an existing variable.
Syntax
SetProp(LPCTSTR name, void* data)
Argument |
Description |
---|---|
name |
The name of the property to be set |
data |
A pointer to the data buffer where the variable's value resides |
Return value
None.
Examples
In this example, the native class has two functions. This is their description passed in the PBX_GetDescription function:
"subroutine f_setprop(int a)\n" "function int f_getprop()\n"
The functions are associated with these enumerated values:
enum MethodIDs { mid_SetProp = 0, mid_GetProp = 1 };
When the f_setprop function is called from PowerBuilder, the following code sets the value of the pointer SetVal to the integer value passed in by f_setprop, then registers that value in the session with the property name prop_name:
int* SetVal = new int; if (mid == mid_SetProp) { *SetValue = ci -> pArgs -> GetAt(0) -> GetInt(); session -> SetProp(prop_name, SetVal); }
When the f_getprop function is called, the following code uses GetProp to set the GetValue pointer to point to the value associated with prop_name, and then sets the return value to *GetValue:
if (mid == mid_GetProp) { int* GetVal; GetValue = (int *)session -> GetProp(prop_name); ci -> returnValue -> SetInt(*GetVal); }
Usage
SetProp enables you to use a variable value throughout an IPB session without using a global variable, which is susceptible to namespace conflicts with other sessions. SetProp is one of a set of three functions:
-
Use SetProp to register a new variable with the session or to change the value of an existing variable.
-
Use GetProp to access the variable.
-
Use RemoveProp to remove the variable from the list of variables associated with the session when it is no longer needed.
Suppose you want to throw an exception from within a PBNI extension and the exception itself is also defined by the PBNI extension. You call the IPB_Session NewObject function to create an instance of the exception, causing the PBX_CreateNonVisualObject function to be called.
One way to set the value of the fields of the exception before the function returns in a thread-safe manner is to create a new object or structure to hold the exception information before calling NewObject. You can call SetProp to store the structure or the object in the current IPB_Session. When PBX_CreateNonVisualObject is called, you can call GetProp to get the structure or object to obtain the exception information, then call RemoveProp to remove the data you stored in the current session.
See also
Description
Sets the value of the specified shared variable to null.
Syntax
SetSharedVarToNull(pbgroup group, pbfield fid)
Argument |
Description |
---|---|
group |
The group to which the shared variable belongs |
fid |
The field ID of the shared variable |
Return value
None.
Examples
This example tests the IsSharedVarNull and SetSharedVarToNull functions:
curGroup = session -> GetCurrGroup(); cls = session -> GetClass(myobj); fid = session -> GetSharedVarID(curGroup, "i_svar"); if (session -> IsSharedVarNull(curGroup, fid)) session -> SetIntSharedVar(curGroup, fid, 1); else session -> SetSharedVarToNull(curGroup, fid);
See also
Description
Frees an existing string and assigns a new string value to it by performing a deep copy.
Syntax
SetString (pbstring string, LPCTSTR src)
Argument |
Description |
---|---|
string |
A valid pbstring variable whose value is to be replaced |
src |
The string to be assigned to string |
Return value
PBXRESULT. Returns PBX_OK for success or PBX_E_INVALID_ARGUMENT if the new string value is invalid; otherwise, returns PBX_E_OUTOF_MEMORY.
Examples
This example uses the IPB_Session SetString method to set the ret_val string to the return value in the PBCallInfo structure. It also uses the IPB_Value SetPBString method to set values in PBCallInfo:
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); 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(""); Session -> SetPBString(ret_val, Session->GetString (ci->returnValue->GetString())); Session -> FreeCallInfo(ci); delete ci; return ret_val;
Usage
A deep copy is performed. The existing value is destroyed first, and then the contents of the src argument are copied into a new value.
See also
Description
Resets the value of the specified pbtime object.
Syntax
SetTime (pbtime time, pbint hour, pbint minute, pbdouble second)
Argument |
Description |
---|---|
time |
The pbtime object to be reset |
hour |
An hour in the range 0 to 23 |
minute |
A minute in the range 0 to 59 |
second |
A second in the range 0 to 59.999999 |
Return value
PBX_RESULT. PBX_OK for success or PBX_E_INVALID_ARGUMENT if the new time is invalid.
Examples
This code puts a new time with the value 01:01:01 into the time_val property of the pArguments array if the value in the PBCallInfo structure is null. Otherwise it sets time_val to the time in the PBCallInfo structure:
if (ci->pArgs->GetAt(i)->IsNull()) { pArguments[i].time_val = Session-> NewTime(); Session->SetTime(pArguments[i].time_val, 1, 1, 1); // Time: 01:01:01 } else { pArguments[i].time_val = ci-> pArgs-> GetAt(i)-> GetTime(); }
Usage
If the parameters are invalid, the time is reset to 0:0:0.0.
See also
Description
Sets the value of one IPB_Value object to the value of another IPB_Value object.
Syntax
SetValue( IPB_Value* dest, IPB_Value* src)
Return value
None.
Examples
These statements set the return value in the PBCallInfo structure ci to the value IPBValue_ret, then release the IBPValue_ret structure:
Session -> SetValue(ci -> returnValue, IPBValue_ret); Session -> ReleaseValue(IPBValue_ret);
Usage
Unlike the IPB_Value Set<type> methods, the SetValue method does not verify that the datatype of the replacement value matches the datatype of the original value. The original value is freed and a new value is cloned from the src value. Use this method if you want to swap two different IPB_Value objects that have different types.
See also
Description
Splits the specified pbdate object into a year, month, and day.
Syntax
SplitDate (pbdate date, pbint *year, pbint *month, pbint *day)
Argument |
Description |
---|---|
date |
The pbdate object to be split |
year |
A year in the range 1000 to 3000 |
month |
A month in the range 1 to 12 |
day |
A day in the range 1 to 31 |
Return value
PBX_RESULT. PBX_OK for success.
Examples
This statement splits the date in the first value in the PBCallInfo structure:
Session -> SplitDate(ci-> pArgs -> GetAt(0) -> GetDate(), &yy, &mm, &dd);
See also
Description
Splits the specified pbdatetime object into a year, month, day, hour, minute, and second.
Syntax
SplitDateTime(pbdatetime dt, pbint *year, pbint *month, pbint *day, pbint *hour, pbint *minute, pbdouble *second)
Argument |
Description |
---|---|
dt |
The pbdatetime object to be split |
year |
A year in the range 1000 to 3000 |
month |
A month in the range 1 to 12 |
day |
A day in the range 1 to 31 |
hour |
An hour in the range 0 to 23 |
minute |
A minute in the range 0 to 59 |
second |
A second in the range 0 to 59.999999 |
Return value
PBX_RESULT. PBX_OK for success.
See also
Description
Splits the specified time object into an hour, minute, and second.
Syntax
SplitTime(pbtime time, pbint *hour, pbint *minute, pbdouble *second)
Argument |
Description |
---|---|
time |
The pbtime object to be split |
hour |
An hour in the range 0 to 23 |
minute |
A minute in the range 0 to 59 |
second |
A second in the range 0 to 59.999999 |
Return value
PBX_RESULT. PBX_OK for success.
Examples
These statements split a time into hours, minutes, and seconds, and then use the resulting values to set the value of a new time object:
Session->SplitTime(ci.returnValue->GetTime(), &hh, &mm, &ss); ret_val = Session-> NewTime(); Session-> SetTime(ret_val, hh, mm, ss);
See also
Description
Throws a PowerBuilder exception or inherited exception, and replaces the existing exception if there is one.
Syntax
ThrowException (pbobject ex)
Argument |
Description |
---|---|
ex |
The exception to be thrown. The exception must first be created with NewObject. |
Return value
None.
Examples
This code creates a new exception object in the class user_exception_pspp, invokes its SetMessage function, and throws the exception:
pbclass cls; pbmethodID mid; pbobject ex; pbgroup group; PBCallInfo* ci = new PBCallInfo; // Throw exception group = session-> FindGroup("user_exception_pspp", pbgroup_userobject); if (group==NULL) return; cls = session->FindClass(group, "user_exception_pspp"); if (group==NULL) return; ex = session -> NewObject(cls); mid = session-> GetMethodID(cls, "setmessage", PBRT_FUNCTION, "QS"); session-> InitCallInfo(cls,mid,ci); ci-> pArgs[0].SetPBString(session, "Test exception"); session -> InvokeObjectFunction(ex,mid,ci); session -> ThrowException(ex); if (!ThrowToPB) session -> ClearException(); session -> FreeCallInfo(ci); delete ci; return;
See also
Description
Triggers a PowerBuilder event.
Syntax
TriggerEvent(pbobject obj, pbmethodID mid, PBCallInfo *ci)
Argument |
Description |
---|---|
obj |
The pbobject containing the method |
mid |
The pbMethodID returned by GetMethodID |
ci |
A pointer to a preallocated PBCallInfo structure |
Return value
PBXRESULT. Returns PBX_OK for success, or one of the following for failure:
PBX_E_INVALID_ARGUMENT
PBX_E_INVOKE_METHOD_INACCESSABLE
PBX_E_INVOKE_WRONG_NUM_ARGS
PBX_E_INVOKE_REFARG_ERROR
PBX_E_INVOKE_METHOD_AMBIGUOUS
PBX_E_INVOKE_FAILURE
Examples
This code triggers the clicked event on a DataWindow object:
cls = session->GetClass(dwobj); mid = session->GetMethodID (cls, "clicked", PBRT_EVENT, "LIILCdwobject."); session->InitCallInfo(cls, mid, ci); session->TriggerEvent(dwobj, mid, ci); ...
See also
Description
Refreshes a visual property of a PowerBuilder object.
Syntax
UpdateField(pbobject obj, pbfieldID fid)
Argument |
Description |
---|---|
obj |
The pbobject whose user interface property needs to be changed |
fid |
The field ID of the object |
Return value
PBXRESULT. Returns success or failure.
Examples
This function changes the title of a DataWindow control:
void CallBack::f_newtitle(IPB_Session* session, pbstring str_val, pbobject dwobj) { pbclass cls; pbfieldID fid; cls=session->GetClass(dwobj); fid=session->GetFieldID(cls, "title"); if (fid==kUndefinedFieldID) return; session -> SetPBStringField(dwobj,fid,str_val); session -> UpdateField(dwobj,fid); return ; }
Usage
When you change any visual property of a PowerBuilder object by calling Set<type>field functions, the property is changed but the property is not refreshed in the graphical user interface. UpdateField refreshes the visual properties of PowerBuilder objects. You must call this function explicitly when changing any visual property with the Set<type>field functions.
See also
Description
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.
Methods
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 |
Description
A set of datatype-specific methods that return a pointer to the data in IPB_Value.
Syntax
GetArray ( ) GetBlob( ) GetBool ( ) GetByte ( ) GetChar ( ) GetDate ( ) GetDateTime( ) GetDecimal ( ) GetDouble ( ) GetInt ( ) GetLong( ) GetLongLong( ) GetObject ( ) GetReal( ) GetString ( ) GetTime( ) GetUint( ) GetUlong ( )
Return value
A predefined PBNI datatype that corresponds to the PowerBuilder datatype in the method name.
Examples
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);
Usage
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.
See also
Description
Returns the class handle of a PowerBuilder object.
Syntax
GetClass( )
Return value
pbclass or null on error.
Examples
pbclass clz = ci-> pArgs-> GetAt(i)-> GetClass();
See also
Description
Returns the datatype of a single data item or array.
Syntax
GetType()
Return value
pbuint
Examples
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; ...
Usage
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.
See also
Description
Returns true if the IPB_Value instance contains an array; otherwise, returns false.
Syntax
IsArray( )
Return value
pbboolean
Examples
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; }
See also
Description
Returns true if the IPB_Value instance contains a by reference argument; otherwise it returns false.
Syntax
IsByRef()
Return value
pbboolean
Examples
This example shows how you would use IsByRef to test whether an argument is obtained by reference:
if(ci->pArgs->GetAt(i)->IsByRef()) ...
See also
Description
Returns true if the IPB_Value instance contains an enumerated value; otherwise it returns false.
Syntax
IsEnum( )
Return value
pbboolean
See also
Description
Returns true if the IPB_Value instance contains a null value; otherwise, it returns false.
Syntax
IsNull( )
Return value
pbboolean
Examples
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; } ...
See also
Description
Returns true if the IPB_Value instance contains an object or object array; otherwise it returns false.
Syntax
IsObject( )
Return value
pbboolean
Examples
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; } ...
See also
Description
Set of datatype-specific methods that set the value of the IPB_Value instance.
Syntax
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 )
Return value
PBXRESULT.
Examples
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;
Usage
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.
See also
Description
Sets the data contained in the IPB_Value instance to null so the data can be reset.
Syntax
SetToNull( )
Return value
PBXRESULT. If the value is a read-only argument, the error PBX_E_READONLY_ARGS is returned.
Examples
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; ...
See also
Description
The IPB_VM interface loads PowerBuilder applications in third-party applications and interoperates with the PowerBuilder virtual machine (PBVM).
Methods
IPB_VM has two methods:
Description
Creates an IPB_Session object that can be used to call PowerBuilder functions.
Syntax
CreateSession(LPCTSTR applicationName, LPCTSTR* libraryList, pbuint numLibs, IPB_Session** session)
Argument |
Description |
---|---|
applicationName |
The name of the current application object in lowercase |
libraryList |
The library list of the PowerBuilder application that contains the objects and functions to be called |
numLibs |
The number of libraries in the library list |
session |
A pointer to IPB_Session*, which will return the current IPB_Session pointer after the call |
Return value
PBXRESULT. PBX_OK for success.
Examples
This example creates an IPB_Session with the simple library list mydemo.pbl:
IPB_Session* session; IPB_VM* vm = NULL; fstream out; ifstream in; PBXRESULT ret; HINSTANCE hinst=LoadLibrary("pbvm.dll"); if ( hinst== NULL) return 0; out<< "Loaded PowerBuilder VM successfully!"<<endl; P_PB_GetVM getvm = (P_PB_GetVM)GetProcAddress (hinst, "PB_GetVM"); if (getvm == NULL) return 0; getvm(&vm); if (vm == NULL) return 0; static const char *liblist[] = { "mydemo.pbl" }; ret= vm->CreateSession("mydemo", liblist, 1, &session); if (ret != PBX_OK) { out << "Create session failed." << endl; return 0; } out << "Create session succeeded!" <<endl;
See also
Description
Runs the specified application.
Syntax
RunApplication(LPCTSTR applicationName, LPCTSTR* libraryList, pbuint numLibs, LPCSTR commandLine, IPB_Session** session)
Argument |
Description |
---|---|
applicationName |
The name of the application object to be run, in lowercase |
libraryList |
The library list of the application |
numLibs |
The number of libraries in the library list |
commandLine |
Parameters to be passed to the application object |
session |
A pointer to IPB_Session*, which will return the current IPB_Session pointer after the call |
Return value
PBXRESULT. PBX_OK for success.
Examples
This code fragment loads the PowerBuilder VM and runs an application called runapp that uses one library, runapp.pbd. It passes in a command line with two arguments:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { LPCTSTR szHello = "Hello world"; // Provide command line parameters (employee ids) // to be passed to the PowerBuilder application LPCTSTR szcommandline = "102 110"; int wmId, wmEvent, ret; PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_CREATE: { hPBVMInst = ::LoadLibrary("pbvm.dll"); P_PB_GetVM getvm = (P_PB_GetVM) GetProcAddress(hPBVMInst,"PB_GetVM"); IPB_VM* vm = NULL; getvm(&vm); static const char *liblist [] = {"runapp.pbd"}; vm->RunApplication("runapp", liblist, 1, szcommandline, &session); break; }
See also
Description
The IPBX_Marshaler interface is used to invoke remote methods and convert PowerBuilder data formats to the user's communication protocol. A marshaler extension is a PowerBuilder extension that acts as the bridge between PowerBuilder and other components, such as EJBs (obsolete), Java classes, CORBA objects, Web services (obsolete), and so on.
Methods
Method |
Description |
---|---|
Destroys an instance of an object inherited from the IPBX_Marshaler structure |
|
Returns the handle of the PBX that contains the native class |
|
Used in PowerBuilder marshaler native classes to call remote methods |
Description
Use the Destroy method to destroy instances of objects inherited from the IPBX_Marshaler structure.
Syntax
Destroy( )
Return value
None.
Examples
This code destroys the current instance of the SampleMarshaler structure:
void SampleMarshaler::Destroy() { delete this; }
Usage
You must implement this method in the marshaler native class after creating an instance of a marshaler structure and invoking remote methods.
See also
Description
Returns the handle of the PBX that contains the native class. This method is required to allow the PowerBuilder VM to determine which PBXs can be unloaded.
Syntax
GetModuleHandle( )
Return value
pbulong
Examples
This code in the implementation of a marshaler class returns the handle of the PBX:
extern pbulong thisModuleHandle; pbulong SampleMarshaler::GetModuleHandle() { return thisModuleHandle; }
The handle is set in the main module:
pbulong thisModuleHandle = 0; BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { thisModuleHandle = (pbulong)hModule; switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; }
Usage
You must implement this method in the marshaler native class.
See also
Description
Used in PowerBuilder marshaler native classes to call remote methods.
Syntax
InvokeRemoteMethod(IPB_Session *session, pbproxyobject obj, LPCTSTR methodDesc, PBCallInfo *ci)
Argument |
Description |
---|---|
session |
This IPB session |
obj |
The proxy object for the remote object |
methodDesc |
An arbitrary string stored as an alias name for the remote method in the proxy, for example: function int foo(int a) alias "This is a method in remote BizTalk" |
ci |
The parameters and return value setting for the call |
Return value
PBXRESULT.PBX_OK if the call succeeded.
Examples
This example shows a header file for a sample marshaler class:
#include "sampleinclude.h" #include <pbext.h> class SampleMarshaler : public IPBX_Marshaler { private: string d_mystring; long d_mylong; private: void myMethod(string arg1); public: SampleMarshaler( string myString, long mylong ); ~SampleMarshaler(); virtual PBXRESULT InvokeRemoteMethod ( IPB_Session* session, pbproxyObject obj, LPCTSTR methodDesc, PBCallInfo* ci ); virtual pbulong GetModuleHandle(); virtual void Destroy(); };
The associated C++ implementation file contains code like this:
PBXRESULT SampleMarshaler::InvokeRemoteMethod ( IPB_Session* session, pbproxyObject obj, LPCTSTR methodDesc, PBCallInfo* ci ) { // method invocation }
Usage
You must implement this method in the marshaler native class.
See also
Description
The IPBX_NonVisualObject interface inherits from IPBX_UserObject and is the direct ancestor class of nonvisual PowerBuilder native classes.
Methods
IPBX_NonVisualObject inherits two methods from the IPBX_UserObject interface: Destroy and Invoke.
Description
The IPBX_UserObject interface is the ancestor class of the PowerBuilder native classes.
Methods
IPBX_UserObject has two methods: Destroy and Invoke
Description
Destroys the current instance of a PowerBuilder native class that inherits from IPBX_UserObject.
Syntax
Destroy( )
Return value
None.
Examples
This example shows how you would call Destroy for the class MyPBNIClass:
void MyPBNIClass::Destroy() { delete this; }
Usage
You must implement this method in the native class after creating an instance of the class and invoking remote methods.
See also
Description
Calls methods in PowerBuilder native classes.
Syntax
Invoke(IPB_Session * session, pbobject obj, pbmethodID mid, PBCallInfo *ci)
Argument |
Description |
---|---|
session |
This IPB session |
obj |
The PowerBuilder extension object to be invoked |
mid |
The pbMethodID returned by GetMethodID |
ci |
The parameters and return value setting for the call |
Return value
PBXRESULT.PBX_OK for success.
Examples
In this example, the method invoked depends on the value (0, 1, or 2) of the method ID returned from the GetMethodID method:
PBXRESULT PBNIExt::Invoke ( IPB_Session* session, pbobject obj, pbmethodID mid, PBCallInfo* ci ) { PBXRESULT result = PBX_OK; switch (mid) { case mFuncA: result = FuncA(session, obj, ci); break; case mFuncB: result = FuncB(session, obj, ci); break; case mFuncC: result = FuncC(session, obj, ci); break; default: result = PBX_E_INVOKE_FAILURE; break; } return PBX_OK; }
See also
Description
The IPBX_VisualObject interface inherits from IPBX_UserObject and is the direct ancestor class of visual PowerBuilder native classes.
Methods
IPBX_VisualObject has three direct methods:
IPBX_NonVisualObject inherits two methods from the IPBX_UserObject interface:
Description
Creates a window control and returns its handle to the PowerBuilder VM.
Syntax
CreateControl(DWORD dwExStyle, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HINSTANCE hInstance)
Argument |
Description |
---|---|
dwExStyle |
The extended window style |
lpWindowName |
The window name |
dwStyle |
The window style |
x |
The horizontal position of the window |
y |
The vertical position of the window |
nWidth |
The window's width |
nHeight |
The window's height |
hWndParent |
The handle of the parent or owner window |
hInstance |
The handle of the application instance |
Return value
HWND.
Examples
This is part of a visual extension example available on the Appeon website:
LPCTSTR CVisualExt::GetWindowClassName() { return s_className; } HWND CVisualExt::CreateControl ( DWORD dwExStyle, // extended window style LPCTSTR lpWindowName, // window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HINSTANCE hInstance // handle to application instance ) { d_hwnd = CreateWindowEx(dwExStyle, s_className, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, NULL, hInstance, NULL); ::SetWindowLong(d_hwnd, GWL_USERDATA, (LONG)this); return d_hwnd; }
Usage
The window must be registered before you call CreateControl.
See also
Description
Returns the identifier of an event when the window's parent is notified that the event occurred.
Syntax
GetEventID(HWND hWnd, uint iMsg, WPARAM wParam, LPARAM lParam)
Argument |
Description |
---|---|
hWnd |
The handle of the parent window. |
iMsg |
The message sent to the parent. |
wParam |
The word parameter of the message. For WM_COMMAND, the high-order word specifies:
The low-order word specifies the identifier of the control, accelerator, or menu. For WM_NOTIFY, this parameter contains the identifier of the control sending the message. |
lParam |
The long parameter of the message. For WM_COMMAND, this parameter contains the handle of the control sending the message if the message is from a control. Otherwise, this parameter is null. For WM_NOTIFY, this parameter contains a pointer to a structure. |
Return value
Integer.
Examples
In this example, the GetEventID function returns the identifier PB_BNCLICKED if a WM_COMMAND message with the notification code BN_CLICKED was sent. It returns the identifier PB_ENCHANGE if a WM_NOTIFY message was sent; otherwise it returns PB_NULL.
TCHAR CVisualExt::s_className[] = "PBVisualExt"; LPCTSTR CVisualExt::GetWindowClassName() { return s_className; } HWND CVisualExt::CreateControl ( DWORD dwExStyle,// extended window style LPCTSTR lpWindowName,// window name DWORD dwStyle,// window style int x,// horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle of parent or owner window HINSTANCE hInstance// handle of application instance ) { d_hwnd = CreateWindowEx(dwExStyle, s_className, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, NULL, hInstance, NULL); ::SetWindowLong(d_hwnd, GWL_USERDATA, (LONG)this); return d_hwnd; } int CVisualExt::GetEventID( HWND hWnd, /* Handle of parent window */ UINT iMsg, /* Message sent to parent window*/ WPARAM wParam, /* Word parameter of message*/ LPARAM lParam /* Long parameter of message*/ ) { if (iMsg == WM_COMMAND) { if ((HWND)lParam == d_hwnd) { switch(HIWORD(wParam)) { case BN_CLICKED: return PB_BNCLICKED; break; } } } if (iMsg == WM_NOTIFY) { return PB_ENCHANGE; } return PB_NULL; }
Usage
This function is used to process Windows messages, such as WM_COMMAND and WM_NOTIFY, that are sent to the parent of an object and not to the object itself. Such messages cannot be caught in the visual extension's window procedure. The PBVM calls GetEventID to process these messages.
If the message is mapped to a PowerBuilder event, GetEventID returns the event's identifier, for example PB_BNCLICKED, and the event is fired automatically. PowerBuilder event token identifiers are mapped to unsigned integer values in the pbevtid.h header file. The identifiers in pbevtid.h are associated with PowerBuilder event token names. For example, the identifier PB_BNCLICKED is associated with the token name pbm_bnclicked.
If the message is not mapped to an event, GetEventID returns the value PB_NULL and the message is discarded.
See also
Description
Returns the name of the window.
Syntax
GetWindowClassName()
Return value
LPCTSTR.
Examples
The string returned by GetWindowClassName is passed as an argument to the CreateControl method:
LPCTSTR CVisualExt::GetWindowClassName() { return s_className; }
Usage
The window must be registered before you call GetWindowClassName.
See also
Description
PBArrayInfo is a C++ structure used to hold information about arrays.
Properties
Member |
Type |
Description |
---|---|---|
ArrayBound |
Local struct declaration |
Structure of type pblong containing the boundaries (upperBound, lowerBound) of a dimension. |
BoundedArray |
Enum data |
Used in arrayType to identify that the array is a bounded array. |
UnboundedArray |
Enum data |
Used in arrayType to identify that the array is an unbounded array. |
arrayType |
Enum type |
Used in IPB_Session::GetArrayInfo to identify the datatype of the array. Do not set this variable manually. |
valueType |
pbuint |
The datatype of array items. Set it to pbvalue_type if it is a simple type, or pbobject if the item is a class or structure. |
numDimensions |
pbuint |
Number of dimensions of the array. An unbounded array can have only one dimension. The lower bound is one. |
bounds |
ArrayBound[] |
Array bounds declaration array, used in a bounded array. |
Description
PBCallInfo is a C++ structure used to hold arguments and return type information in function calls between PBNI and PowerBuilder.
Member |
Type |
Description |
---|---|---|
pArgs |
IPB_Arguments* |
Interface used to access arguments |
returnValue |
IPB_Value |
Holds return data after the call |
returnClass |
pbclass |
Holds return class after the call |
Description
The PB_DateData structure is used to pass data of type Date in the SetData function in the IPB_RSItemData interface.
Field |
Description |
---|---|
year |
A short identifying the year |
month |
A short identifying the month |
day |
A short identifying the day |
filler |
A short used for structure alignment only |
See also
Description
The PB_DateTimeData structure is used to pass data of type DateTime in the SetData function in the IPB_RSItemData interface.
Field |
Description |
---|---|
date |
A PB_DateData structure identifying the date |
time |
A PB_TimeData structure identifying the time |
See also
Description
The PB_TimeData structure is used to pass data of type Time in the SetData function in the IPB_RSItemData interface.
Field |
Description |
---|---|
hour |
A short identifying the hour |
minute |
A short identifying the minute |
second |
A short identifying the second |
filler |
A short used for structure alignment only |
See also
Description
The PBX_DrawItemStruct structure contains the properties of an external visual control that you want to draw using the PBX_DrawVisualObject function.
Field |
Description |
---|---|
x |
X coordinate of the visual control relative to its parent control (for example, the window that contains it). |
y |
Y coordinate of the visual control relative to its parent control. |
width |
Width of the visual control. |
height |
Height of the visual control. |
objectName |
The name of the visual object, for example: uo_1. |
tag |
Field to be used to pass any value at the user's discretion. |
enabled |
Whether the visual control is enabled. Possible values are true and false. |
visible |
Whether the visual control is visible. Possible values are true and false. In the development environment, PowerBuilder does not call the PBX_DrawVisualObject function if this field is set to false and the Design>Show Invisibles menu item is not selected. |
borderstyle |
Border style of the visual control. A value of the pbborder_style enumerated variable. Possible values are:
|
backColor |
Background color of the visual control. You can obtain the RGB value of the background color using the Windows API functions GetRValue, GetGValue, and GetBValue. |
See also
Description
There are two versions of the PBArrayAccessor template class. The first version is used to access the items in an array of a standard type. The second version is used to access items in a string array. The standard types are defined as ValueTypes in pbtraits.h and are pbint, pbuint, pbbyte, pblong, pblonglong, pbulong, pbboolean, pbreal, pbdouble, pbdec, pbdate, pbtime, pbdatetime, pbchar, pbblob, and pbstring.
PBArrayAccessor has four methods:
Description
Obtains the array item at the specified dimension.
Syntax
GetAt(pblong dim[])
Return value
ValueType (defined in pbtraits.h).
Examples
See SetAt.
See also
Description
Returns true if the array item contains a null value, otherwise returns false.
Syntax
IsNull(pblong dim[ ])
Return value
pbboolean.
See also
Description
Sets the array item at the specified dimension.
Syntax
For arrays of a specified ValueType:
SetAt(pblong dim[ ], ValueType v)
For string arrays:
SetAt(pblong dim[ ], LPCTSTR string) SetAt(pblong dim[ ], pbstring string)
Argument |
Description |
---|---|
dim |
The dimension of the array item to be set |
v |
A ValueType defined in pbtraits.h |
string |
A string of type pbstring or LPCTSTR |
Return value
None.
Examples
This example shows the use of GetAt and SetAt in arrays of a type specified by a ValueType:
template < typename T, pbvalue_type I> void ArrayCreator<T, I>::f_unbounded_simple_array( IPB_Session* session, ifstream in, fstream out, LPCSTR data_type) { pbarray out_array; int i; pblong dim[4], itemcount1, itemcount2; T *iarg, oarg; in >> itemcount1; iarg = new T[itemcount1]; // Create unbounded integer array { PBUnboundedArrayCreator<I> ac(session); out_array = ac.GetArray(); PBArrayAccessor<I> aa(session, out_array); for(i=0; i<itemcount1; i++) in >> iarg[i]; for (i=0; i<itemcount1; i++) { dim[0]=i+1; aa.SetAt(dim, iarg[i]); } itemcount2 = session->GetArrayItemCount(out_array); out <<"The array item count is "<< itemcount2 << endl; for (i=0; i<itemcount2; i++) { dim[0]=i+1; oarg=aa.GetAt(dim); if (oarg != iarg[i]) out << "*** ERROR"<< endl; else out << oarg << " "; } } delete []iarg; out << endl; return; }
See also
Description
There are two versions of the PBBoundedArrayCreator template class. The first version is used to create a bounded array of a standard type. The standard types are defined as ValueTypes in pbtraits.h and are pbint, pbuint, pbbyte, pblong, pblonglong, pbulong, pbboolean, pbreal, pbdouble, pbdec, pbdate, pbtime, pbdatetime, pbchar, pbblob, and pbstring.The second version is used to create a bounded array of strings.
Methods
PBBoundedArrayCreator has two methods:
Description
Obtains an array that has been created.
Syntax
GetArray()
Return value
pbarray.
Examples
This example sets up an array, reads in values, and then obtains the values in the array:
LPCTSTR *ostr_a; char **sp; int i; pbarray out_array; arrayBounds* bounds; pbuint dim1, dim2, current_dim; pblong itemcount1, itemcount2; PBXRESULT ret; PBArrayInfo* ai; pbstring *iarg, *oarg; typedef PBBoundedArrayCreator<pbvalue_string> BoundedStringArrayCreator; in >> dim1; // allocate memory for pointer bounds bounds = (arrayBounds*)malloc(dim1*sizeof (PBArrayInfo::ArrayBound)); bounds = new arrayBounds[dim1]; // read in lowerbound and upperbound for each dimension // and calculate the array item count itemcount1 = 1; for (i=0;i<dim1;i++) { in >>bounds[i].lowerBound >> bounds[i].upperBound; itemcount1 = itemcount1* (bounds[i].upperBound - bounds[i].lowerBound +1); } sp = new char*[itemcount1]; ostr_a = new LPCTSTR[itemcount1]; iarg = new pbstring[itemcount1]; // Read in array items for (i=0; i<itemcount1; i++) { sp[i] = new char[20]; in >> sp[i]; iarg[i]= session->NewString(sp[i]); } // create bounded simple array and set iarg[i] to it { BoundedStringArrayCreator ac(session, dim1, bounds); current_dim = 1; BoundedArrayItem<pbstring, pbvalue_string, BoundedStringArrayCreator>::f_set_arrayitem (session, ac, dim1, bounds, iarg, current_dim); BoundedArrayItem<pbstring, pbvalue_string, BoundedStringArrayCreator>::array_itemcount = 0; out_array = ac.GetArray(); }
See also
Description
Sets a value or string to the array item at the specified dimension.
Syntax
For arrays of a specified ValueType:
SetAt(pblong dim[], ValueType v)
For string arrays:
SetAt(pblong dim[], LPCTSTR string) SetAt(pblong dim[], pbstring string)
Argument |
Description |
---|---|
dim |
The dimension of the array item to be set |
v |
A ValueType defined in pbtraits.h |
string |
A string of type pbstring or LPCTSTR |
Return value
None.
Examples
This example shows the use of SetAt in arrays of a type specified by a ValueType:
// arguments: // ac: class object of PBBoundedArrayCreator or // PBBoundedObjectArrayCreator to set items into // dimensions: array dimension, can be 1,2,3,...,n // bounds: upper and lower bound for each dimension // iarg: T type array to store the data value set // into array creator ac // current_dim: remember which dimension is looped into template < typename T, pbvalue_type I,class C> void BoundedArrayItem<T,I,C>::f_set_arrayitem (IPB_Session* session, C& ac, pblong dimensions, arrayBounds* bounds, T* iarg, int current_dim) { int i; if (current_dim > dimensions) return; for(i= bounds[current_dim-1].lowerBound; i<= bounds[current_dim-1].upperBound; i++) { if (current_dim == dimensions) { dim[current_dim-1]= i; ac.SetAt(dim,iarg[array_itemcount]); array_itemcount++; } else{ dim[current_dim-1]= i; BoundedArrayItem<T,I,C>::f_set_arrayitem (session, ac, dimensions, bounds, iarg, current_dim+1); } } }
See also
Description
The PBBoundedObjectArrayCreator class is used to create an object array.
Methods
PBBoundedObjectArrayCreator has two methods:
Description
Obtains an array that has been created.
Syntax
GetArray()
Return value
pbarray.
Examples
This example sets the values in an array and then uses GetArray to obtain the array:
PBBoundedObjectArrayCreator<pbvalue_string> ac(session); for (i=0;i<itemcount1;i++) { ac.SetAt(i+1,iarg[i]); } out_array = ac.GetArray();
See also
Description
Sets the array item at the specified dimension.
Syntax
For arrays of a specified ValueType:
SetAt(pblong dim[], ValueType v)
For string arrays:
SetAt(pblong dim[], LPCTSTR string) SetAt(pblong dim[], pbstring string)
Argument |
Description |
---|---|
dim |
The dimension of the array item to be set |
v |
A ValueType defined in pbtraits.h |
string |
A string of type pbstring or LPCTSTR |
Return value
None.
Examples
This method is included in the example for GetArray.
See also
Description
The PBObjectArrayAccessor class is used to access the items in an object array.
Methods
PBObjectArrayAccessor has two methods:
Description
Obtains the array item at the specified dimension.
Syntax
GetAt(pblong dim[])
Return value
pbobject.
Examples
This example shows the use of GetAt in an object array:
PBObjectArrayAccessor aa(session, *array_val); for (i=0;i<itemcount2;i++) { dim[0] = i+1; oarg = aa.GetAt(dim); cls = session->GetClass(oarg); if( cls == NULL ) return; fid = session->GetFieldID(cls, "text"); if ( fid == 0xffff) return; fid_pv = session->GetFieldAddress(oarg,fid); mystr = fid_pv->GetString(); ostr_a[i] = session->GetString(mystr); }
See also
Description
Sets the array item at the specified dimension.
Syntax
SetAt(pblong dim[], pbobject obj)
Return value
None.
Examples
This example shows the use of SetAt in an object array:
PBObjectArrayAccessor aa(session,*array_val); for (i=0;i<itemcount1;i++) { cls = session->FindClass(group,sp[i]); if( cls == NULL ) return; iarg = session->NewObject(cls); session->ReferenceObject(iarg); dim[0] = i+1; aa.SetAt(dim, iarg); fid = session->GetFieldID(cls, "text"); if ( fid == 0xffff ) return; fid_pv = session->GetFieldAddress(iarg, fid); mystr = fid_pv->GetString(); istr_a[i] = session->GetString(mystr); }
See also
Description
There are two versions of the PBUnboundedArrayCreator template class. The first version is used to create an unbounded array of a standard type. The standard types are defined as ValueTypes in pbtraits.h and are pbint, pbbyte, pbuint, pblong, pblonglong, pbulong, pbboolean, pbreal, pbdouble, pbdec, pbdate, pbtime, pbdatetime, pbchar, pbblob, and pbstring.The second version is used to create an unbounded array of strings.
Methods
PBUnboundedObjectArrayCreator has two methods:
Description
Obtains an array that has been created.
Syntax
GetArray()
Return value
pbarray.
Examples
This example sets the values in an array and then uses GetArray to obtain the array:
PBUnboundedArrayCreator<pbvalue_string> ac(session); for (i=0; i<itemcount1; i++) { ac.SetAt(i+1,iarg[i]); } out_array = ac.GetArray();
See also
Description
Sets the array item at the specified position.
Syntax
For arrays of a specified ValueType:
SetAt(pblong pos, ValueType v)
For string arrays:
SetAt(pblong pos, LPCTSTR string) SetAt(pblong pos, pbstring string)
Argument |
Description |
---|---|
pos |
A pblong identifying a position in the array |
v |
A ValueType defined in pbtraits.h |
string |
A string of type pbstring or LPCTSTR |
Return value
None.
Examples
This example shows the use of SetAt in arrays of a type specified by a ValueType:
PBUnboundedArrayCreator<I> ac(session); in >> iarg[i]; for (i=0; i<itemcount1; i++) { ac.SetAt(i+1, iarg[i]); } out_array = ac.GetArray();
See also
Description
The PBUnboundedObjectArrayCreator class is used to create an object array.
Methods
PBUnboundedObjectArrayCreator has two methods:
Description
Obtains an array that has been created.
Syntax
GetArray( )
Return value
pbarray.
See also
Description
Sets the array item at the specified dimension.
Syntax
For arrays of a specified ValueType:
SetAt( pblong pos, ValueType v )
For string arrays:
SetAt( pblong pos, LPCTSTR string ) SetAt( pblong pos, pbstring string )
Argument |
Description |
---|---|
pos |
A pblong identifying a position in the array |
v |
A ValueType defined in pbtraits.h |
string |
A string of type pbstring or LPCTSTR |
Return value
None.
See also
Description
The following table lists methods that must be implemented in the PowerBuilder extension module when the conditions shown in the table apply. The methods are described after the table.The PBX_GetVersionmethod is used by PowerBuilder to determine whether the compiler macro UNICODE or _UNICODE has been set. It is for internal use only.
Methods
Method |
Required |
---|---|
When the extension contains nonvisual native classes |
|
When the extension contains visual native classes |
|
When you want to be able to draw a visual representation of the visual object in the PowerBuilder development environment |
|
In all extensions |
|
When the extension contains global functions |
|
When you need to initialize and uninitialize a session |
Description
Creates a new instance of a nonvisual PowerBuilder extension object.
Syntax
PBX_CreateNonVisualObject(IPB_Session* pbsession, pbobject pbobj, LPCTSTR xtraName, IPBX_NonVisualObject **obj)
Argument |
Description |
---|---|
pbsession |
This IPB session |
pbobj |
The name of a pbobject corresponding to the PowerBuilder extension object to be created |
xtraname |
The name of the PowerBuilder native class in lowercase |
obj |
The PowerBuilder extension object to be created |
Return value
PBXRESULT. PBX_OK for success.
Examples
In this example, the extension contains several classes. The object created depends on the string value of the class name passed in.
PBXEXPORT PBXRESULT PBXCALL PBX_CreateNonVisualObject ( IPB_Session* pbsession, pbobject pbobj, LPCTSTR xtraName, IPBX_NonVisualObject **obj ) { PBXRESULT result = PBX_OK; string cn(className); if (cn.compare("class_a") == 0) { *obj = new class_a(pbobj); } else if (cn.compare("class_b") == 0) { *obj = new class_b(pbobj); } else if (cn.compare("class_c") == 0) { *obj = new class_b(pbobj); else{ *obj = NULL; result = PBX_E_NO_SUCH_CLASS; } return PBX_OK; };
Usage
You must implement this method in every PowerBuilder extension module that contains nonvisual classes. When you use the CREATE statement in PowerScript to create a new PowerBuilder extension object, the PBVM calls this method.
See also
Description
Creates a new instance of a visual PowerBuilder extension object.
Syntax
PBX_CreateVisualObject(IPB_Session* pbsession, pbobject pbobj, LPCTSTR xtraName, IPBX_NonVisualObject**obj)
Argument |
Description |
---|---|
pbsession |
This IPB session |
pbobj |
The name of a pbobject corresponding to the PowerBuilder extension object to be created |
xtraname |
The name of the PowerBuilder native class in lowercase |
obj |
The PowerBuilder extension object to be created |
Return value
PBXRESULT. PBX_OK for success.
Examples
In this example the extension contains several classes. The object created depends on the string value of the class name passed in.
PBXEXPORT PBXRESULT PBXCALL PBX_CreateVisualObject ( IPB_Session* pbsession, pbobject pbobj, LPCTSTR className, IPBX_VisualObject **obj ) { PBXRESULT result = PBX_OK; string cn(className); if (cn.compare("visualext") == 0) { *obj = new CVisualExt(pbsession, pbobj); } else { *obj = NULL; result = PBX_FAIL; } return PBX_OK; };
Usage
You must implement this method in every PowerBuilder extension module that contains visual classes. When you use a visual extension in a PowerBuilder application, the PBVM calls this method.
See also
Description
Draws a visual object in the PowerBuilder development environment.
Syntax
PBX_DrawVisualObject(HDC hDC, LPCTSTR className, const PBX_DrawItemStruct& property)
Argument |
Description |
---|---|
hDC |
A handle to the device context of the object |
classname |
The name of the visual extension object to be drawn |
property |
A PBX_DrawItemStruct structure specifying the display properties of the object |
Return value
PBXRESULT. The return value of this function is currently ignored.
Examples
This is an extension of a sample that is available on the PowerBuilder Code Samples website at https://www.appeon.com/developers/library/code-samples-for-pb. It draws a representation of a light-emitting diode (LED) and uses Microsoft Foundation Classes (MFC):
PBXEXPORT PBXRESULT PBXCALL PBX_DrawVisualObject ( HDC hDC, LPCTSTR xtraName, const PBX_DrawItemStruct& property ) { // If this PBX is dynamically linked against the MFC // DLLs, any functions exported from this PBX that //call into MFC must have the AFX_MANAGE_STATE macro // added at the very beginning of the function. AFX_MANAGE_STATE( AfxGetStaticModuleState() ); // Variables to hold the Led control and a pointer // to Device Context CLed *myLed; CDC* pDC; // The name must not contain uppercase letters if ( strcmp( xtraName, "u_cpp_led" ) == 0 ) { CRect rc( property.x, property.y, property.x + property.width, property.y + property.height ); //Create a new LED myLed = new CLed(); // Get the handle from the hDC pDC = CDC::FromHandle(hDC); CWnd* pWnd = pDC->GetWindow(); // Create the window myLed->Create(NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP, rc, pWnd); // Function that handles the background // rendering of the control myLed->OnEraseBkgndIDE(pDC); // Draw the LED in default mode (red, on, round) myLed->DrawLed(pDC,0,0,0); myLed->SetLed(0,0,0); //done delete myLed; } return PBX_OK; }
Usage
In a visual extension, export this function if you want the visual control to be drawn in the development environment. If you do not export the function, you need to run the application to see the appearance of the visual control.
See also
Description
Passes a description of all the classes and methods in the PowerBuilder extension module to PowerBuilder.
Syntax
PBX_GetDescription ( )
Return value
LPCTSTR containing the description of the module.
Examples
The following extension module contains three classes:
PBXEXPORT LPCTSTR PBXCALL PBX_GetDescription() { static const TCHAR desc[] = { "class class_a from nonvisualobject\n" "function long meth1(string classpath)\n" "function string meth2()\n" "end class\n" "class class_b from nonvisualobject\n" "subroutine sbrt1()\n" "subroutine sbrt2()\n" "function long func1()\n" "end class\n" "class class_c from nonvisualobject\n" "end class\n" }; return desc; }
The following module contains a visual class that has two subroutines (functions that do not return values), two events that require that Windows messages be captured in the extension (onclick and ondoubleclick), and one event that maps a Windows message directly to a PowerBuilder event (testmouse). The module also contains two global functions, funca and funcb.
PBXEXPORT LPCTSTR PBXCALL PBX_GetDescription() { static const TCHAR desc[] = { "class visualext from userobject\n" "event int onclick()\n" "event int ondoubleclick()\n" "subroutine setcolor(int r, int g, int b)\n" "subroutine settext(string txt)\n" "event testmouse pbm_mousemove \n" "end class\n" "globalfunctions\n" "function int funca(int a, int b)\n" "function int funcb(int a, int b)\n" "end globalfunctions\n" }; return desc; }
Usage
You must implement this method in every PowerBuilder extension module. The method is exported from the PowerBuilder extension module and is used by PowerBuilder to display the prototype of each class, function, and event in the module.
The syntax of the description follows:
Multiple instances
A syntax element with an asterisk indicates that multiple instances of that element can appear in a description. For example, [Desc]* indicates that one description can contain multiple classes, global functions, and forward declarations.
Desc::= class_desc| globalfunc_desc| forward_desc | [Desc]* class_desc::= class className from parentClass newline [methods_desc]* end class newline globalfunc_desc:= globalfunctions newLine [func_desc]* end globalfunctions forward_desc:= forward newLine [forwardtype_desc]* end forward forwardtype_desc:= class className from parentClass newline className::= a PowerBuilder token (cannot duplicate an existing group name) parentClass::= any class inherited from NonVisualObject or UserObject newline ::= a newline character methods_desc::= method_desc [methods_desc]* method_desc::= func_desc| sub_desc| event_desc func_desc::= function returnType funcName(args_desc) newline returnType :: = pbType pbType::= any PowerBuilder type | previous declared PBNI class funcName::= a PowerBuilder token args_desc::= None | arg_desc, [args_desc]* arg_desc::= [ ref | readonly ] pbType argName [array_desc] argName::= a PowerBuilder token array_desc::= array declaration of PowerBuilder sub_desc::= subroutine subName(args_desc) newline event_desc::= event returnType eventName(args_desc) newline | event eventName pbevent_token newline pbevent_token :: = string
This syntax for event_desc allows you to map a Windows message directly to a PowerBuilder event:
event eventName pbevent_tokennewline
For more information, see Event processing in visual extensions.
See also
Description
Contains the implementation of one or more global functions used in the PowerBuilder extension module.
Syntax
PBX_InvokeGlobalFunction(IPB_Session* pbsession, LPCTSTR functionname, PBCallinfo* ci);
Argument |
Description |
---|---|
pbsession |
This IPB session |
functionname |
The name of the global function |
ci |
A pointer to a preallocated PBCallInfo structure containing the parameters and return value setting for the function |
Return value
PBXRESULT. PBX_OK for success.
Examples
This PBX_GetDescription call declares three global functions: bitAnd, bitOr, and bitXor:
PBXEXPORT LPCTSTR PBXCALL PBX_GetDescription() { static const TCHAR desc[] = { "globalfunctions\n" "function int bitAnd(int a, int b)\n" "function int bitOr(int a, int b)\n" "function int bitXor(int a, int b)\n" "end globalfunctions\n" }; return desc; }
The PBX_InvokeGlobalFunction call contains the implementation of the functions:
PBXEXPORT PBXRESULT PBXCALL PBX_InvokeGlobalFunction ( IPB_Session* pbsession, LPCTSTR functionName, PBCallInfo* ci ) { PBXRESULT pbrResult = PBX_OK; int arg1 = ci->pArgs->GetAt(0)->GetInt(); int arg2 = ci->pArgs->GetAt(1)->GetInt(); if (stricmp(functionName, "bitand") == 0) { ci->returnValue->SetInt(arg1 & arg2); }else if (strcmp(functionName, "bitor") == 0) { ci->returnValue->SetInt(arg1 | arg2); }else if (strcmp(functionName, "bitxor") == 0) { ci->returnValue->SetInt(arg1 ^ arg2); }else{ return PBX_FAIL; } return pbrResult; }
Usage
Use this function in a PowerBuilder native class that uses global functions. The function is exported from the PowerBuilder extension module and is used to identify global functions included in the module. Like global functions in PowerScript, global functions in PowerBuilder extensions cannot be overloaded.
See also
Description
Used to initialize and uninitialize a session.
Syntax
PBXEXPORT PBXRESULT PBXCALL PBX_Notify(IPB_Session* pbsession,pbint reasonForCall)
Return value
PBXRESULT
Examples
This sample shows code that exports PBX_Notify and displays a message box after the PBX is loaded and before it is unloaded:
PBXEXPORT PBXRESULT PBXCALL PBX_Notify ( IPB_Session* pbsession, pbint reasonForCall ) { switch(reasonForCall) { case kAfterDllLoaded: MessageBox(NULL, "After PBX loading", "", MB_OK); break; case kBeforeDllUnloaded: MessageBox(NULL, "Before PBX unloading", "", MB_OK); break; } return PBX_OK; }
Usage
If PBX_NOTIFY is exported, the PBVM calls PBX_Notify immediately after an extension PBX is loaded and just before the PBX is unloaded. You can use this function to initialize and uninitialize a session. For example, you could create a session manager object, and store it in the IPB session using the SetProp function. Later, you could use GetProp to obtain the session object.
Description
This method is exported by the PowerBuilder VM:
Description
Passes the IPB_VM interface to the user.
Syntax
PB_GetVM (IPB_VM** vm)
Examples
This example loads the PowerBuilder VM and calls the f_getrowcount function on the nvo_dw custom class user object:
#include <pbext.h> #include <iostream.h> typedef PBXEXPORT PBXRESULT (*P_PB_GetVM)(IPB_VM** vm); class LibraryLoader { public: LibraryLoader(LPCSTR libname) { d_hinst = LoadLibrary(libname); } ~LibraryLoader() { FreeLibrary(d_hinst); } operator HINSTANCE() { return d_hinst; } private: HINSTANCE d_hinst; }; int main() { int int_rowcount; PBXRESULT ret; LibraryLoader loader("pbvm.dll"); if ((HINSTANCE)loader == NULL) return 0; P_PB_GetVM getvm = (P_PB_GetVM) GetProcAddress((HINSTANCE)loader, "PB_GetVM"); if (getvm == NULL) return 0; IPB_VM* vm = NULL; getvm(&vm); if (vm == NULL) return 0; static const char *liblist[] = { "load_pbvm.pbl" }; IPB_Session* session = NULL; ret = vm->CreateSession ("load_pbvm", liblist, 1, &session); if (ret!= PBX_OK) { cout << " Create session failure!" << endl; return 0; } return 1; }
Usage
To load the PowerBuilder VM and run a PowerBuilder application in a third-party server or application, you first create an IPB_VM object using the PB_GetVM method. Then, create an IPB_Session object within IPB_VM, using the application's name and library list as arguments.
See also