




 
The 
define-com-method
 macro is used to define a COM method for a particular implementation class.
define-com-method 
method-spec
 (
class-spec
 
arg-spec*
)
                  
form*
method-spec ::= method-name | ( interface-name method-name )
Specifies the method to be defined.
A symbol naming the method to define.
A symbol naming the interface of the method to define. This is only required if the implementation class class-name has more than one method with the given method-name .
Specifies the implementation class and variables bound to the object with in the form s.
A symbol which will be bound to the COM object whose method is being invoked.
A symbol naming the COM implementation class for which this method is defined.
A optional symbol which will be bound to the COM interface pointer whose method is being invoked. Usually this is not needed unless the interface pointer is being passed to some other function in the implementation.
Describes one of the method's arguments.
A symbol which will be bound to that argument's value while the form s are evaluated.
Specifies the direction of the argument, either 
:in
, 
:out
 or 
:in-out
 If specified, it must match the definition of the interface. The default is taken from the definition of the interface.
Specifies how the argument will be converted to a Lisp value. It can be either 
:lisp
 or 
:foreign
, the default is 
:lisp
.
Forms which implement the method. The value of the final form is returned as the result of the method.
The macro 
define-com-method
 defines a COM method that implements the method 
method-name
 for the COM implementation class 
class-name
. The extended 
method-spec
 syntax is required if 
class-name
 implements more than one interface with a method called 
method-name
 (analogous to the C++ syntax 
InterfaceName::MethodName
).
The symbol 
this
 is bound to the instance of the COM implementation class on which the method is being invoked. The symbol 
this
 is also defined as a local macro (as if by 
with-com-object
), which allows the body to invoke other methods on the instance.
If present, the symbol interface is bound to the interface pointer on which the method is being invoked.
Each foreign argument is converted to a Lisp argument as specified by the pass-style . See Data conversion in define-com-method for details.
If an error is to be returned from an Automation method, the function 
set-error-info
 can be used to provide more details to the caller.
(define-com-method (i-robot rotate)
((this i-robot-impl)
(axis :in)
(angle-delta :in))
(let ((joint (find-joint axis)))
(rotate-joint joint))
S_OK)