CreateClassMember

 (Available in 01 TS COM - TS_COM_IDispatch)

Purpose

Create a new class member

Syntax

oSomeIObject:CreateClassMember( #MyMethod, 0x00000001 )

Arguments

usymClassMember
SYMBOL ( Symbolic name of the method )
udwDispIDMember
DWORD ( Member ID for the named method )
ulAutoResolveItemIndexes
LOGIC|NIL ( Default FALSE ) [ Only valid for ACCESS types ]
usiVariantType
SHORT|NIL

Description

Creates a new class member ( a class member is a METHOD, ACCESS or ASSIGN method ) that will be recognized by the 'Invoke()' method. COM uses 'MemberID's to identify methods, the 'MemberID' must match with one of the registered METHOD, ACCESS or ASSIGN methods before the 'Invoke()' method can execute the method.

The 'ulAutoResolveItemIndexes' can be used when defining ACCESS methods if this parameter is TRUE and the ACCESS method retuns an array then the 'ItemIndex' is resolved automaticly. In the case of a COM server application you do not have to write a paramerized ACCESS method and stil the result array van be indexed from the client ( at the server side ), this is a great speed enhancer!

Returns

Return = LOGIC ( TRUE if succeeded )

Example

METHOD INIT( uoOwner, uoInvokeHandler ) CLASS TS_HOutlookApplicationEvents
   TSTrace Enter CREATE
   SUPER:INIT( uoOwner, uoInvokeHandler )
   IF SELF:IsValidObject
      SELF:CreateClassMember( #OnApplicationItemSend, 0x0000F002  ; ...
     ... )
      SELF:CreateClassMember( #OnApplicationNewMail, 0x0000F003  ; ...
     ... )
      SELF:CreateClassMember( #OnApplicationReminder, 0x0000F004  ; ...
     ... )
      SELF:CreateClassMember( #OnApplicationOptionsPagesAdd,  ; ...
     ... 0x0000F005 )
      SELF:CreateClassMember( #OnApplicationStartup, 0x0000F006  ; ...
     ... )
      SELF:CreateClassMember( #OnApplicationQuit, 0x0000F007  ; ...
     ... )
   END
   TSTrace Leave
RETURN SELF

Source

METHOD CreateClassMember( usymClassMember, udwDispIDMember, ulAutoResolveItemIndexes ; ...
..., usiVariantType ) CLASS TS_IDispatch
LOCAL oInvokeHandler AS OBJECT
LOCAL symClassMember AS SYMBOL
LOCAL dwDispIDMember AS DWORD
LOCAL lRetVal AS LOGIC
   TSTrace Enter
   symClassMember:=usymClassMember
   dwDispIDMember:=TS_SafeDWORD( udwDispIDMember, NULL_PTR )
   oInvokeHandler:=SELF:_InvokeHandler
   IF SELF:_FirstClassMember
      SELF:_FirstClassMember:=FALSE
      IF !SELF:_InternalCreateClassMember( #AsString, 0U, #ACCESS  ; ...
     ... , FALSE )
         TSTrace Warning "!SELF:_InternalCreateClassMember(#AsString,0U,#ACCESS,FALSE)"
      END
   END
   DO CASE
   CASE oInvokeHandler==NULL_OBJECT
      TSTrace Warning "(oInvokeHandler:=SELF:_InvokeHandler)==NULL_OBJECT"
      lRetVal:=FALSE
   CASE dwDispIDMember==0U
      TSTrace Warning "dwDispIDMember==0U"
      lRetVal:=FALSE
   CASE IsMethod( oInvokeHandler, symClassMember )
      lRetVal:=SELF:_InternalCreateClassMember( symClassMember ; ...
     ... , dwDispIDMember, #METHOD , FALSE, usiVariantType )
   CASE IsAccess( oInvokeHandler, symClassMember )
      lRetVal:=SELF:_InternalCreateClassMember( symClassMember ; ...
     ... , dwDispIDMember, #ACCESS , IIF( IsLogic( ulAutoResolveItemIndexes ), ulAutoResolveItemIndexes ; ...
     ... , FALSE ), usiVariantType )
      IF lRetVal .AND. IsAssign( oInvokeHandler, symClassMember )
         lRetVal:=SELF:_InternalCreateClassMember( symClassMember ; ...
        ... , dwDispIDMember, #ASSIGN , FALSE, usiVariantType )
      END
   CASE IsAssign( oInvokeHandler, symClassMember )
      lRetVal:=SELF:_InternalCreateClassMember( symClassMember ; ...
     ... , dwDispIDMember, #ASSIGN , FALSE, usiVariantType )
   OTHERWISE
      TSTrace Warning "No Access/Assign/Method '"+AsString( symClassMember )+"' in " ; ...
     ... +"class '"+AsString( TS_ClassName( oInvokeHandler ) )+"'"
      lRetVal:=FALSE
   END
   oInvokeHandler:=NULL_OBJECT
   TSTrace Leave
RETURN lRetVal