makepy support for versioning
Jim Kerr
jim_kerr at agilent.com
Mon Jun 7 17:59:54 EDT 2004
Does makepy always respect versioning of interfaces? It appears as
though makepy correctly handles versioning of objects you obtain
directly, but not for objects you get via a function call.
Here's a simple example to illustrate the point. I created the
C++-based server for this example by pilfering some code in Andrew
Troelsen's book on COM and ATL.
car = Dispatch("ScriptibleCoCar.DualCoCar")
person = Dispatch("ScriptibleCoCar.Person") # a Person object
carOwner = car.Person # also a Person
object
Both the Car and the Person classes have two versions, and makepy
handles this correctly:
>>> car
<win32com.gen_py.ScriptibleCoCar 1.0 Type Library.IDualCoCar2
instance at 0x17800328>
>>> person
<win32com.gen_py.ScriptibleCoCar 1.0 Type Library.IPerson2
instance at 0x17800368>
(Notice the suffix 2 in both cases). OTOH, the Person object obtained
via car.Person is a version 1 thingie:
>>> carOwner
<win32com.gen_py.ScriptibleCoCar 1.0 Type Library.IPerson
instance at 0x14968112>
If I try to use QueryInterface to get a reference to a version 2
object, it fails:
>>> IID_IPerson2 = "{38332D31-6631-48E9-B62E-449864003395}"
>>> carOwner._oleobj_.QueryInterface(IID_IPerson2)
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
TypeError: There is no interface object registered that supports
this IID
Late binding works fine, however:
>>> import win32com.client.dynamic
>>> dcar = win32com.client.dynamic.Dispatch("ScriptibleCoCar.DualCoCar")
>>> dperson = dcar.Person
>>> dperson.Name, dperson.ID, dperson.Address # Address is new
in version 2
(u'Phony', 123, u'00 Anywhere Place')
I'm kinda stuck here. I could live with using late binding, but the
interface I need to use has a lot of properties with parameters, and
makepy seems like the easiest way to deal with those. So my questions
are:
1) Is there a way around this issue with makepy?
2) If not, is there a way to set the values of properties with
parameters using late binding?
Thanks for the help!
Jim
More information about the Python-list
mailing list