Python COM iterator

Carsten Haese carsten at
Wed Apr 18 23:49:05 EDT 2007

> > On Tue, 2007-04-17 at 16:54 -0500, Larry Bates wrote:
> >> Does anyone know if there is a way to make a Python COM object
> >> act like a proper iterator in VB/Delphi?

After more googling, staring at win32com's code, and a fair bit of trial
and error, I've come up with the following working example:

import pythoncom

class HelloWorld:
    _reg_clsid_ = "{CAB8BED1-9174-4AAD-ABC5-F377951CB71B}"
    _reg_desc_ = "Python Test COM Server"
    _reg_progid_ = "Python.TestServer"
    _public_methods_ = ['Next']
    _com_interfaces_ = [pythoncom.IID_IEnumVARIANT]
    def __init__(self):

    def Next(self, count):
        assert count==1
            return (self.numbers.pop(0),)
        except IndexError:
            return ()
    def _NewEnum(self):
        import win32com.server.util
        return win32com.server.util.wrap(self)

if __name__=='__main__':
  import win32com.server.register 
import win32com.client
comobj = win32com.client.Dispatch("Python.TestServer")
for x in comobj:
    print x

This works for me on Python 2.5 and pywin32 Build 210, but I don't know
whether clients in VB or Delphi are able to use this iterator.


More information about the Python-list mailing list