[python-win32] wrapping objects from a COM server

Jonathan LaCour jonathan-lists at cleverdevil.org
Wed Jan 24 23:36:52 CET 2007


Mark Hammond wrote:

>> Really?  This is not my experience.  I am using whatever the default
>> policy is on all of my objects, and a test case very much like my
>> "Person" and "Title" example below fails unless I loop through the
>> `titles` attribute of my Person instances and manually wrap the
>> Title instances before returning the Person instance.
>>
>> Am I doing something wrong?  Do I need to use a different policy to
>> make this happen?
>
> It should work as described.  Logically, there should be no need
> to wrap an object until it is actually passed via COM. ie, if the
> person.titles attribute was never referenced it should never need to
> be wrapped - which implies it could be wrapped as late as possible
> rather than as early as possible.

Strangely enough, if I attempt to return a `Person` instance that has
a `title` attribute that is a list populated with `Title` instances,
the only way that I can get it to return without raising an Exception
is to loop through all of the `Title` objects and replace them with
wrapped versions.

That being said, I have mostly made my project work.  I ended up just
writing some utility functions that can walk through the object's
attributes recursively (including traversing lists/tuples) and wrap
or unwrap accordingly.  Its a little gross, but it works!

Thanks again for the help.  By and large, this project makes COM easy
to work with, when my prior experiences had been fairly painful.

--
Jonathan LaCour
http://cleverdevil.org





More information about the Python-win32 mailing list