[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