On 12/17/2012 8:25 PM, Mark Hammond wrote:
Dave sent me the source via email.

The root problem is that the MFC project is not supporting the GetTypeInfo() and associated calls, and TBH I'm not sure how hard it would be to make it support that. The end result is that the makepy support for the object isn't being used as pywin32 can't associate the object with the typelib, and thus isn't specifying that additional second param. This is also the reason you can't automagically generate the typelib using, eg, win32com.client.gencache.EnsureDispatch() - you are forced to run makepy manually and specify the exact typelib.

There is actually a deficiency in pywin32 here too - it *does* know that MyApp.Application has a generated class, but it never tries that route - instead it creates the object and tries to use the typeinfo stuff to make the association. I think a bug on sourceforge for this would be good.

So after running makepy, a work-around is:

>>> klass=win32com.client.gencache.GetClassForProgID("MyApp.Application")
>>> x = klass()
>>> x.GetSettingValue("foo")
u'foo=testValue123'
>>>

If you can work out how to get the MFC app to respond to the GetTypeInfo() and associated calls, it would all "just work". ie:

>>> x=win32com.client.Dispatch("MyApp.Application")._oleobj_
>>> x
<PyIDispatch at 0x00000000023590B0 with obj at 0x00000000003C0298>
>>> x.GetTypeInfo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pywintypes.com_error: (-2147352565, 'Invalid index.', None, None)
>>>

should work - eg, a similar example using a WMI object:

>>> x = win32com.client.Dispatch("WbemScripting.SWbemLocator")._oleobj_
>>> x
<PyIDispatch at 0x0000000002359110 with obj at 0x0000000002C513D0>
>>> x.GetTypeInfo()
<PyITypeInfo at 0x00000000023590B0 with obj at 0x00000000003EB8B8>
>>>

So it kinda sucks :(

Mark


Thanks for all the help Mark! I'll look into what it would take to support the GetTypeInfo() call on the MFC side. It sounds like the work-around will do just fine even if I can't get the GetTypeInfo() thing going.


Dave

_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to