An
i-dispatch
interface.
A function of four arguments.
A generalized boolean, default value
nil
.
The coclass to use, or
nil
.
A Lisp object.
A list of "source" interface names, or
nil
.
The function
set-i-dispatch-event-handler
sets an event handler for the
i-dispatch
interface
interface
.
event-handler is a function of four arguments:
event-handler event-obj method-name method-type args
event-obj
is the value of
event-object
if this is non-
nil
. If
event-object
is
nil
,
event-obj
is the value of
interface
.
method-name is the method-name that has been called, which is the same as the "event" name in Visual Basic terminology.
method-type
is the type of the method. For a normal "event" it is
:method
.
method-type
can also be
:put
or
:get
if the underlying "source" interface has "propput" or "propget" methods or properties.
args is an array containing the arguments to the method ("event"). This varies according to the method. For out or in-out arguments, it is possible to return a value by setting the corresponding value in the array.
The
all, coclass and source-names
arguments to
set-i-dispatch-event-handler
tell it which "source" interface or interfaces to use. In most cases, the default is correct.
If
all
is
nil
then only the "default" "source" is used. If
all
is true, then
set-i-dispatch-event-handler
uses all the source interfaces that the coclass defines.
coclass
tells
set-i-dispatch-event-handler
which coclass to use, which is the same as the object in Visual Basic terminology.
If
coclass
is
nil
, it uses the first coclass in the type library that has the type of
interface
as a default interface, or if there is no such coclass, the first coclass that has this interface. In most of the cases this is the desired coclass.
If
coclass
is non-
nil
, it specifies which coclass to use. It can be a ProgID (for example
"Word.Application"
) or a coclass name or a coclass GUID. If the
i-dispatch
interface
was created with create-instance, then the argument to create-instance is the correct coclass to use.
If
source-names
is non-
nil
, then it is a list of "source" interface names to use, and
all
and
coclass
are ignored. If source-names is nil, then
set-i-dispatch-event-handler
calls get-i-dispatch-source-names to calculate the "source" interface names.
sinks
is a list of objects representing the connections that
set-i-dispatch-event-handler
made. When the events are no longer needed, they can be released by disconnect-standard-sink.
Note:
set-i-dispatch-event-handler
can be called more than once on the same
i-dispatch
, and this generates new connections each time. Therefore, if it is called more than once such that it uses the same source names, events will arrive more than once.
Note: if you need to call
set-i-dispatch-event-handler
repeatedly, then it is most efficient to call get-i-dispatch-source-names once and pass the result
source-names
to
set-i-dispatch-event-handler
.
Note: there is a useful function create-instance-with-events which combines create-instance and set-i-dispatch-event-handler.