Step 3: Declare native classes and global functions
For each
native class that the nonvisual extension supports, declare an ANSI C++ class
that inherits from IPBX_NonVisualObject, which is the ancestor class
for all nonvisual PowerBuilder native classes.
The declaration of the class can be placed in a header file,
and it must include Invoke and Destroy methods.
This is a simple prototype for a nonvisual class:
#include "pbext.h"
class CMyClass : public IPBX_NonVisualObject
{
enum MethodIDs
{
mFunca = 0,
mFuncb = 1
};
public:
// constructor, destructor
CMyClass()
virtual ~CMyClass()
// member methods
PBXRESULT Invoke(
IPB_Session *session,
pbobject obj,
pbmethodID mid,
PBCallInfo *ci
);
void Destroy();
private:
void funcA(IPB_Session* session, pbobject obj,
PBCallInfo* ci);
void funcB(IPB_Session* session, pbobject obj,
PBCallInfo* ci);
};
If you declare global functions in your extension, the extension
must export the PBX_InvokeGlobalFunction method.
The following 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;
}