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