By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,909 Members | 2,008 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,909 IT Pros & Developers. It's quick & easy.

makepy support for versioning

P: n/a
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
Jul 18 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.