Nick Collier schrieb: > Hi, > > I originally and mistakenly posted this on the win32 list, so > apologies if its been seen already.
No problem. And apologies from myself for the late reply; I'm always very busy at the start of the week. > I'm working with some ESRI com libraries (9.0). I've managed to > retrieve an ILayer from an IMap and then cast IFeatureLayer from the > ILayer. > > feature = layer.QueryInterface > (comtypes.gen.esriGeoDatabase.IFeatureLayer) > > Now, what I want to get is the FeatureClass property of the feature. > So, I do: > > feature.FeatureClass > > and this yields: > > <bound method POINTER(IFeatureLayer).FeatureClass of <POINTER > (IFeatureLayer) object cbc990>> > > And > > feature.FeatureClass() > > yields: > > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: required argument 'fclass' missing > > fclass needs to be a pointer to an IFeatureClass whose CoClass, > FeatureClass, is a non-creatable COM class. > > > Other properties seem to work. For example, > > feature.DataSourceType > > returns > > u'Personal Geodatabase Feature Class' > > I'm not sure if matters but the relevant parts of feature._methods_ are: > > (<class 'ctypes.HRESULT'>, '_get_FeatureClass', (<class > 'ctypes.LP_POINTER(IFeatureClass)'>,), ((10, 'fclass'),), ('propget', > u"The layer's feature class."), u" The layer's feature class.") > > (<class 'ctypes.HRESULT'>, 'FeatureClass', (<class 'comtypes.POINTER > (IFeatureClass)'>,), ((1, 'fclass'),), ('propputref', u"The layer's > feature class."), u"The layer's feature class.") > > (<class 'ctypes.HRESULT'>, '_get_DataSourceType', (<class > 'ctypes.LP_BSTR'>,), ((10, 'Text'),), ('propget', u'Data source > type.'), u'Data source type.') > > (<class 'ctypes.HRESULT'>, '_set_DataSourceType', (<class > 'comtypes.BSTR'>,), ((1, 'Text'),), ('propput', u'Data source > type.'), u'Data source type.') > The problem is the 'propputref' in the 'FeatureClass' method. Personally, I use comtypes to access com objects implemented in ATL and MFC. These com objects have not been designed for access from VB, this is probably the reason that I have never found 'propputref' properties in these objects. So, the comtypes bug is that the 'propputref' midl keyword in simply ignored; and it seems that it is wrongly converted into a method instead. I have read old discussions on the ctypes-users list (from more than 2.5 years ago), where Stefan Schukat tried to explain the difference between 'propput' and 'propputref' to me. I think I'm grasping this eventually; still I have no idea how com properties that have both 'propput' and 'propputref' should be exposed by comtypes. I found that the MS speech api (SAPI.SpVoice) also uses 'propputref' together with 'propget' for one property and was able to construct a test case with this. It seems that, at least if 'propputref' but no 'propput' is present, handling 'propputref' in comtypes in the same way as 'propput' will do the trick, at least for the speech objects. Maybe you can simulate this if you, in the generated files in the comtypes\gen subdirectory, replace all 'propputref' occurrences with 'propput'. I would very much like to fix this issue, but I still have to find one or two COM objects (on my system) that use both 'propput' and 'propputref' for the same property. It would be great if someone can help me to construct some test cases. Thomas ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ comtypes-users mailing list comtypes-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/comtypes-users