Python COM - limit on size/complexity of returned object?

Paul Keating google at prodigycomputing.com
Thu Jun 24 07:27:50 EDT 2004


I have a very simple COM server written in Python that is trying to
return a two-dimensional array 268 x 20. The values it contains are
some small integers, some short (<29 character) Unicode strings, and
None.

To isolate the problem I have taken out the code that builds the
matrix from real data, and just substituted a literal tuple of tuples,
like this:

class AtlasSecurity:
  _reg_progid_ = 'Arena.Security'
  ...
  def GetProfileComponentMatrixEx(self):
#   self.BuildMatrix()
    self.matrix = ((u'ID', u'Name', u'Type', .... ),
    ... ))  # a 268-tuple of 20-tuples
    self.last_result = (self.matrix,)
    return self.last_result

Because I was having trouble calling it from Excel ("the server has
disconnected from its clients"), to see what was going on I decided to
call it from a Python client, like this:

from win32com.client import Dispatch
x = Dispatch("Arena.Security")
print x.GetProfileComponentMatrixEx()

This blows up in python22.dll with a C++ Runtime abort(), no matter
what I try. I can write a method that I can call 268 times to return
the data one 20-element vector at a time. This works, but is really
only good for simple data structures and I need this to work with
structures of arbitrary complexity and levels of nesting.

Is there a restriction on the size or complexity of the SafeArray that
pythoncom is constructing from the returned value? Or what else am I
doing wrong?

(I am using Python 2.2 because I am working with embedded Python and
that is the version that is embedded.)



More information about the Python-list mailing list