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:
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;
};