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