Out parameters are returned from the method as part of a tuple (if there is a return value already it will be in the tulle as the second item)
On Sat, Jan 30, 2016, 07:38 Djordje Spasic via Ironpython-users < ironpython-users@python.org> wrote: > Thank you Stéphane!! > > That solved the problem! > > Do you mind if I ask another question? > Right now I am trying to call another method: FixUP > <http://www.mapwindow.org/documentation/mapwingis4.8/class_shape.html#a25b160700f4c07dd86104c6675431ebf> > . > The problem with it, is that it requires a single "out" argument. > > Here is how I tried to call it: > > MapWinGIS.ShapeClass.FixUp(shape) # raises an error below > > But it raises this error message: > > *Message: expected ShapeClass, got __ComObject* > > The same happens if I call it like so: > > shape.FixUp() > > The *__ComObject *in this case is *shape* variable. Any object I get, has > this kind of type. > Is there a way to somehow cast the *shape* to *MapWinGIS.ShapeClass* type? > I tried this: > > shapeCast = clr.Reference[MapWinGIS.ShapeClass](shape) # raises the same > upper error on this line > > But the same upper message appears (*"expected ShapeClass, got > __ComObject*") > > Any advice on how to supply the upper "out" argument to "FixUp" method? > Or maybe how to cast the *shape* to *MapWinGIS.ShapeClass* type? > > Thank you. > > Djordje Spasic > > > ------------------------------ > *From:* Stéphane Lozier <stephane.loz...@gmail.com> > *To:* Djordje Spasic <issworld2...@yahoo.com> > *Cc:* "ironpython-users@python.org" <ironpython-users@python.org> > *Sent:* Friday, January 29, 2016 9:02 PM > *Subject:* Re: [Ironpython-users] Cannot create instances of that class > because it is abstract > > I can't say I really know what's going on, but you could try using unbound > class instance methods (see > http://ironpython.net/documentation/dotnet/dotnet.html#using-unbound-class-instance-methods > ). > > For example: > MapWinGIS.Shapefile.Open(sf, shpfilename, None) > > On Fri, Jan 29, 2016 at 11:55 AM, Djordje Spasic <issworld2...@yahoo.com> > wrote: > > Thank you for the explanation Stéphane. > > When I use MapWinGIS.ShapefileClass() instead of MapWinGIS.Shapefile(): > > import clr > > > clr.AddReferenceToFileAndPath("C:/mapwindow_dlls/Interop.MapWinGIS.dll") > > import MapWinGIS > > sf = MapWinGIS.*ShapefileClass*() > shpfilename = "C:/example.shp" > sf.Open(shpfilename, None) # raises Error > > It raises an error: > > *Could not convert argument 0 for call to Open.* > > I googled a couple of times, and found one place where the same issue has > emerged: here on stackoverflow > <http://stackoverflow.com/questions/2296714/ironruby-cannot-call-method-on-a-com-object-with-one-or-more-arguments> > . > Stackoverflow issue is actually not related with ironpython, but with > ironruby. The author states that the solution is to supply the CLR string > as an argument to "Open" function, instead of regular ruby string. I tried > that replicating that in ironpython: > > shpfilename = clr.Reference[System.String]("c:/example.shp") > > But again the upper error message, did not go away. > > Further googling found that this kind of issues may happen when trying to > call methods in .NET from "*Interop COM objects*" > <http://stackoverflow.com/questions/8529313/how-do-i-call-a-vb6-com-object-from-c-sharp-with-dynamic-when-it-has-a-ref-param>. > But only if that method has "*ref parameters*". Which *Open* method does > not. Here is the signature of the *Open* method: > > Help on method-descriptor Open Open(...) > Open(self: ShapefileClass, ShapefileName: str, cBack: Callback) -> > bool > > // MapWinGIS.ShapefileClass > [DispId(11)] > [MethodImpl(MethodImplOptions.InternalCall)] > public virtual extern bool Open([MarshalAs(UnmanagedType.BStr)] [In] > string ShapefileName, [MarshalAs(UnmanagedType.Interface)] [In] ICallback > cBack = null); > > > I would be very grateful for any kind of advice Stéphane. > > Kind regards, > Djordje Spasic > > > ------------------------------ > *From:* Stéphane Lozier <stephane.loz...@gmail.com> > *To:* Djordje Spasic <issworld2...@yahoo.com> > *Cc:* "ironpython-users@python.org" <ironpython-users@python.org> > *Sent:* Friday, January 29, 2016 5:24 PM > *Subject:* Re: [Ironpython-users] Cannot create instances of that class > because it is abstract > > Shapefile is an interface with a CoClassAttribute to ShapefileClass (which > means when you do new Shapefile() in C# it creates an instance of > ShapefileClass). I have no idea what the correct behaviour for IronPython > should be, but in this case MapWinGIS.Shapefile gives you the interface. > > You could try MapWinGIS.ShapefileClass() instead of MapWinGIS.Shapefile(). > > > > On Mon, Jan 25, 2016 at 11:03 AM, Djordje Spasic via Ironpython-users < > ironpython-users@python.org> wrote: > > Hello, > > I am trying to call a specific method ("Open") from the .NET assembly. > The .NET assembly along with all other .dlls and necessary files, can be > downloaded from here > <https://mapwindow4.codeplex.com/releases/view/110244>. It's free an open > source project: MapWindow. > > In their examples page > <http://www.mapwindow.org/documentation/mapwingis4.9/examples.html>, by > loading the *Interop.MapWinGIS.dll* file, they call the *MapWinGIS.* > *Shapefile.Open()* method like so: > > using MapWinGIS; > > string shpfilename = "C:/example.shp"; > Shapefile sf = new Shapefile(); > if (sf.*Open*(shpfilename, null)) > { > } > > > However, when I try the same thing in ironpython: > > import clr > import os > > shpfilename = "C:/example.shp" > dllsfilename = "C:/mapwindow_dlls" > > clr.AddReferenceToFileAndPath(os.path.join(dllsfilename, > "Interop.MapWinGIS.dll")) > print "Interop.MapWinGIS.dll loaded: ", "Interop.MapWinGIS" in > [assembly.GetName().Name for assembly in clr.References] # prints: True > import MapWinGIS > > sf = MapWinGIS.Shapefile() # raises Error > sf.*Open*(shpfilename, None) > > > I am getting an error message: > > * "Message: Cannot create instances of Shapefile because it is abstract"* > > Why is this happening? > > I contacted the author of the project, but couldn't solve the issue. > > Any kind of advice would be helpful. > > Kind regards, > Djordje Spasic > > > _______________________________________________ > Ironpython-users mailing list > Ironpython-users@python.org > https://mail.python.org/mailman/listinfo/ironpython-users > > > > > > > > _______________________________________________ > Ironpython-users mailing list > Ironpython-users@python.org > https://mail.python.org/mailman/listinfo/ironpython-users >
_______________________________________________ Ironpython-users mailing list Ironpython-users@python.org https://mail.python.org/mailman/listinfo/ironpython-users