| DMI Basics | Features Profile | DMI Client Interface | ScriptVar | DMI Server | Using DMI in C++ | DMI with CfgScript | DMI Server Objects | Subclassing | Delegates |
Each ACDK object implements the StdDispatch interface.
This interface provides the basic methods to access member
by name and calling function by name dynamically at runtime.
Content of this chapter: |
! |
The extract of StdDispatch sources shown below may be outdated. |
class StdDispatch { // ... /** calls a method of this object used in generated stub @param fname name of function @param ret return value of this function @param args arguments of the method @param dc client, calling this method @param namedArgs The last n values in args are named arguments. if no named arguments passed, caller should pass Nil @param flags for the method (like static, public) @param methinf If client caches method information @throw DmiException in case of DMI-Errors (like wrong parameter) @return the called ClazzMethodInfo. Client may use this cache this value for the next call to improve performance */ virtual const ClazzMethodInfo* standardDispatch( const char* fname, ScriptVar& ret, ScriptVarArray& args, DmiClient& dc, ::acdk::lang::RStringArray namedArgs, int flags, const ClazzMethodInfo* methinf = 0); /** This method is the static version of the method above. For each ACDK class with metainformation a function pointer a MyClass::StandardDispatch will be avaible in the ClazzInfo structure. */ static const ClazzMethodInfo* StandardDispatch(const char* fname, ScriptVar& ret, ScriptVarArray& args, DmiClient& dc, ::acdk::lang::RStringArray namedArgs, int flags, const ClazzMethodInfo* methinf = 0); /** retreive a static member variable @param clazz the ClazzInfo @param fieldname name of the member @param dc DmiClient to use to convert types @param flags normally Modifier::PUBLIC | Modifier::STATIC @param type_requested Type for target ScriptVar. if zero no conversion will be done @throw NoSuchElementException if given Member not exists @throw ParamsMismatchException if type cannot be converted */ static ScriptVar getStaticMember(const ClazzInfo* clazz, const char* fieldname, DmiClient& dc, int flags, const ClazzInfo* type_requested = 0); /** retreive a member variable of this object @param fieldname name of the member @param dc DmiClient to use to convert types @param flags normally Modifier::PUBLIC @param type_requested Type for target ScriptVar. if zero no conversion will be done @throw NoSuchElementException if given Member not exists @throw ParamsMismatchException if type cannot be converted */ ScriptVar getMember(const char* fieldname, DmiClient& dc, int flags, const ClazzInfo* type_requested = 0); /** set a static member variable core implementetion @param clazz the ClazzInfo @param fieldname name of the member @param newval new value of the member @param dc DmiClient to use to convert types @param flags normally Modifier::PUBLIC | Modifier::STATIC @throw NoSuchElementException if given Member not exists @throw ParamsMismatchException if type cannot be converted */ static void setStaticMember(const ClazzInfo* clazz, const char* fieldname, ScriptVar& newval, DmiClient& dc, int flags); /** set a member variable. This is the core implementetion. You may use poke() instead @param clazz the ClazzInfo @param fieldname name of the member @param newval new value of the member @param dc DmiClient to use to convert types @param flags normally Modifier::PUBLIC @throw NoSuchElementException if given Member not exists @throw ParamsMismatchException if type cannot be converted @see poke */ void setMember(const char* fieldname, ScriptVar& newval, DmiClient& dc, int flags); |