A generic function called by IDispatch::Invoke when there is no defined dispinterface method.
A COM object whose method is being invoked.
A string naming the method to be called.
A keyword specifying the type of method being called.
A vector containing the arguments to the method.
The generic function
com-object-dispinterface-invoke
is called by IDispatch::Invoke when there is no method defined using define-dispinterface-method.
Methods can be written for
com-object-dispinterface-invoke
, specializing on an Automation implementation class and implementing the method dispatch based on
method-name
and
method-type
.
The method-name argument is a string specifying the name of the method as given by the method declaration in the IDL or type library. The method-type argument, has one of the following values:
when invoking a property getter method.
when invoking a property setter method.
when invoking a normal method.
The arguments to the method are contained in the vector args , in the order specified by the method declaration in the type library. For in and in-out arguments, the corresponding element of args contains the argument value converted to the type specified by the method declaration and then converted to Lisp objects as specified in Data conversion when calling Automation methods. For out and in-out arguments, the corresponding element of args should be set by the method to contain the value to be returned to the caller and will be converted to an automation value as specified in Data conversion when calling Automation methods.
The value should be a value which can be converted to the appropriate return type as the primary value of the method and will be converted to an automation value as specified in Data conversion when calling Automation methods. It is ignored for methods that are declared as returning void.
Note: when using
com-object-dispinterface-invoke
, it is not possible to distinguish between invocations of the same method name for different interfaces when
com-object
implements several interfaces. If this is required, then the method must be defined with define-dispinterface-method.