I am curious about Perl Win32::OLE's implementation (or lack thereof)
of the IMessageFilter interface.  I have a COM server which implements
IMessageFilter in order to prevent reentrancy and serialize calls into
a second COM server.  In the IMessageFilter::HandleIncomingCall
implementation I return either SERVERCALL_RETRYLATER if I can't handle
the request now, or SERVERCALL_ISHANDLED if I want the request to be
processed.  The problem it seems that when I make 2 simultaneous calls
from Win32::OLE into my server, one of them returns the error "call
was rejected by callee".  It is as if instead of retrying the COM
call, Perl simply thinks the call was rejected outright and returns
that error.

The other side of this is that calling my COM server which implements
IMessageFilter from an (ATL) COM client seems to work ok.  So I am
guessing that perhaps ATL provides a default client implementation of
IMessageFilter::RetryRejectedCall which actually retries the call
while Perl Win32::OLE does not provide this implementation.  I did a
quick grep of the Win32::OLE source and found no references to
IMessageFilter, RetryRejected, or anything like that but I could have
missed something.

All I want is for my COM call to be retried until the server
ultimately determines it is ok to process and returns
SERVERCALL_ISHANDLED.

If anybody has any insight into this scenario and the behavior of Perl
with respect to COM message filters, I would be very grateful.

_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to