Thank you Thomas.
I didn't see it. :)
As soon as I implemented your change I realised the error of my ways and
fixed the code.

Regards,
Aidar Talibzhanov
 

-----Original Message-----
From: Thomas Heller [mailto:[EMAIL PROTECTED] 
Sent: 25 November 2008 16:07
To: comtypes-users@lists.sourceforge.net
Subject: Re: [comtypes-users] Can't call a function from COM method

[EMAIL PROTECTED] schrieb:
> Hi,
> 
> I need to interact with our internal COM API. One of the functions 
> requires a callback - just a COM object, which implements a certain 
> interface.
> I have implemented that interface in Python and use it.
> It works fine -> my Python implementation is called fine. What I have 
> problem with is that from inside my callback I can't call any external

> Python code - like my another function.
> Here is a sample:
> 
> def gfun(self, path, content): 
>     print 'Global func'
>     
> class MXObjRefEventsImpl(MXObjRefEvents):
>     # registry entries
>     _reg_threading_ = "Apartment"
>     _reg_progid_ = "MyCOM.MXObjRefEvents.1"
>     _reg_novers_progid_ = "MyCOM.MXObjRefEvents"
>     _reg_desc_ = "IMXObjRefEvents Python implementation"
>     _reg_clsctx_ = comtypes.CLSCTX_INPROC_SERVER
>     _regcls_ = comtypes.server.localserver.REGCLS_MULTIPLEUSE
>     
>     _Call = gfun
>     
Content)
> 
> 
> Whenever MXObjRefEventsImpl is call I see:
> OnObjRefUpdate
> <unbound method MXObjRefEventsImpl.gfun>
> 
> But nothing else :(
> 
> Can anyone advise me?

The problem with your sample is that executing
MXObjRefEventsImpl._Call(...) raises a TypeError: "unbound method gfun()
must be called with MXObjRefEventsImpl instance as first argument (got
int instance instead)"

The comtypes problem ;-) is that you normally will not see the
traceback, because comtypes catches the exception and converts it into a
HRESULT error code which will be returned to the caller.  Depending on
how your server runs, it may also be possible that you would not see the
traceback even if it were printed because there is no console window or
whatever.  However, comtypes logs exceptions in COM servers with the
standard Python logging module.

So, you should do this, probably in the module where your server is
implemented:

- Configure the log level so that ERROR calls will be output.
- Configure the logging output so that you can see the output.

Another, simpler (?) solution is to enclose the code into a try: except:
block like this:

    def OnObjRefUpdate(self, Source, Instance, Path):
        try:
            print 'OnObjRefUpdate'
            print MXObjRefEventsImpl._Call
            MXObjRefEventsImpl._Call(Path, Instance.Content)
        except:
            import traceback; traceback.print_exc()


Thomas


------------------------------------------------------------------------
-
This SF.Net email is sponsored by the Moblin Your Move Developer's
challenge Build the coolest Linux based applications with Moblin SDK &
win great prizes Grand prize is a trip for two to an Open Source event
anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users
_______________________________________________

This e-mail may contain information that is confidential, privileged or 
otherwise protected from disclosure. If you are not an intended recipient of 
this e-mail, do not duplicate or redistribute it by any means. Please delete it 
and any attachments and notify the sender that you have received it in error. 
Unless specifically indicated, this e-mail is not an offer to buy or sell or a 
solicitation to buy or sell any securities, investment products or other 
financial product or service, an official confirmation of any transaction, or 
an official statement of Barclays. Any views or opinions presented are solely 
those of the author and do not necessarily represent those of Barclays. This 
e-mail is subject to terms available at the following link: 
www.barcap.com/emaildisclaimer. By messaging with Barclays you consent to the 
foregoing.  Barclays Capital is the investment banking division of Barclays 
Bank PLC, a company registered in England (number 1026167) with its registered 
office at 1 Churchill Place, London, E14 5HP.  This email may relate to or be 
sent from other members of the Barclays Group.
_______________________________________________

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
comtypes-users mailing list
comtypes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/comtypes-users

Reply via email to