Python COM iterator
Carsten Haese
carsten at uniqsys.com
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:
# server.py
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):
self.numbers=[1,2,3,4,5,6,7,8]
def Next(self, count):
assert count==1
try:
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
win32com.server.register.UseCommandLine(HelloWorld)
# client.py
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.
-Carsten
More information about the Python-list
mailing list