In the win32com.client class CastTo method, it is assumed that the target interface type exists in the same library as the object to be casted. To work around that issue, I modified the method with an optional argument stating the target interface's library, as follows:
def CastTo_mod(ob, target, typelib = None): """'Cast' a COM object to another interface""" mod = None if not typelib is None: # caller provided typelib of target mod = gencache.MakeModuleForTypelib(typelib.clsid, typelib.lcid, int(typelib.major), int(typelib.minor)) if not hasattr(mod, target): raise ValueError("The interface name '%s' does not appear in the " \ "assigned library %r" % (target, typelib.ver_desc)) # todo - should support target being an IID elif hasattr(target, "index"): # string like # for now, we assume makepy for this to work. # ... <snip> .... mod = gencache.GetModuleForCLSID(target_clsid) if not mod is None: target_class = getattr(mod, target) # resolve coclass to interface target_class = getattr(target_class, "default_interface", target_class) return target_class(ob) # auto QI magic happens raise ValueError after which I can cast to the type from some other library (targetlib) like object = CastTo(object, 'targetinterfacename', targetlib) where targetlib is a TypelibSpec taken from a search by name in the list returned from selecttlb.EnumTlbs(). Any chance we can have some functionality like that in the release? Thanks, Pieter _______________________________________________ python-win32 mailing list python-win32@python.org https://mail.python.org/mailman/listinfo/python-win32