Step
5: Export methods to create class instances
PowerBuilder creates nonvisual and visual class instances
differently:
-
For visual classes, the instance is created when the window or
visual control in which the class is used is opened. See Creating visual class
instances. -
For nonvisual classes, the instance is created when the
PowerBuilder CREATE statement is used. This is described
next.
When the PowerBuilder application creates an instance of a
nonvisual class using the PowerScript CREATE statement, the PBVM calls
the PBX_CreateNonVisualObject method in the extension. Every extension
that contains nonvisual native classes must export this method.
In the same way that multiple classes are included in a single
description passed by PBX_GetDescription, PBX_CreateNonVisualObject can
be used to create multiple classes.
In this example, the extension has three classes. An IF statement
compares the name of the class passed in from the PowerBuilder
CREATE statement to the name of each of the classes in the extension in
turn and creates an instance of the first class with a matching name.
You could also use a CASE statement. The class name in the string
comparison must be all lowercase:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
PBXEXPORT PBXRESULT PBXCALL PBX_CreateNonVisualObject( IPB_Session * session, pbobject obj, LPCSTR className, IPBX_NonVisualObject **nvobj ) { PBXRESULT result = PBX_OK; // The class name must not contain uppercase if ( strcmp( className, "classone" ) == 0 ) *nvobj = new ClassOne; else if ( strcmp( className, "classtwo" ) == 0 ) *nvobj = new ClassTwo( session ); else if ( strcmp( className, "classthree" ) == 0 ) *nvobj = new ClassThree; else { *nvobj = NULL; result = PBX_E_NO_SUCH_CLASS; } return PBX_OK; }; |