<html><head></head><body><div style="color:#000; background-color:#fff; font-family:verdana, helvetica, sans-serif;font-size:13px"><div id="yiv7853688039"><div id="yui_3_16_0_1_1454060246609_37817"><div id="yui_3_16_0_1_1454060246609_37816" style="color:#000;background-color:#fff;font-family:verdana, helvetica, sans-serif;font-size:13px;"><div id="yiv7853688039yui_3_16_0_1_1454085077485_6611"><span></span></div><div id="yiv7853688039yui_3_16_0_1_1454085077485_6688"><div id="yui_3_16_0_1_1454060246609_47098">Thank you for the explanation Stéphane.</div><div id="yui_3_16_0_1_1454060246609_47099"><br></div></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6689">When I use MapWinGIS.ShapefileClass() instead of MapWinGIS.Shapefile():</div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6808"><br clear="none"></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6809">    import clr<br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6899" clear="none">   <br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6901" clear="none">    clr.AddReferenceToFileAndPath("C:/mapwindow_dlls/Interop.MapWinGIS.dll")<br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6903" clear="none"><br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6905" clear="none">    import MapWinGIS<br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6907" clear="none">   <br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6909" clear="none">    sf = MapWinGIS.<b id="yiv7853688039yui_3_16_0_1_1454085077485_6934">ShapefileClass</b>()<br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6911" clear="none">    shpfilename = "C:/example.shp"<br class="yiv7853688039" id="yiv7853688039yui_3_16_0_1_1454085077485_6913" clear="none">    sf.Open(shpfilename, None)  # raises Error<br clear="none"></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6810"><br clear="none"></div><div class="yiv7853688039qtdSeparateBR" id="yiv7853688039yui_3_16_0_1_1454085077485_6570"><div id="yiv7853688039yui_3_16_0_1_1454085077485_6935">It raises an error:</div><div id="yiv7853688039yui_3_16_0_1_1454085077485_6937"><blockquote id="yui_3_16_0_1_1454060246609_39093"><div id="yui_3_16_0_1_1454060246609_37932" dir="ltr"><i class="" id="yui_3_16_0_1_1454060246609_37930">Could not convert argument 0 for call to Open.</i></div></blockquote><div id="yui_3_16_0_1_1454060246609_39038" dir="ltr"><span id="yui_3_16_0_1_1454060246609_39040" class=""><span id="yui_3_16_0_1_1454060246609_40259" class="">​I googled a couple of times, and found one place where the same issue has emerged: <a id="yui_3_16_0_1_1454060246609_42628" class="edited-link-editor" href="http://stackoverflow.com/questions/2296714/ironruby-cannot-call-method-on-a-com-object-with-one-or-more-arguments">here on stackoverflow</a>.​<br class="" id="yui_3_16_0_1_1454060246609_40247">​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:<br class="" id="yui_3_16_0_1_1454060246609_40249"></span></span></div><blockquote id="yui_3_16_0_1_1454060246609_41396"><div id="yui_3_16_0_1_1454060246609_40284" dir="ltr"><span id="yui_3_16_0_1_1454060246609_39040" class=""><span id="yui_3_16_0_1_1454060246609_40259" class=""></span></span><span id="yui_3_16_0_1_1454060246609_39040" class=""><span id="yui_3_16_0_1_1454060246609_40259" class="">shpfilename = clr.Reference[System.String]("c:/example.shp")</span></span></div></blockquote><div id="yui_3_16_0_1_1454060246609_40289" dir="ltr"><span id="yui_3_16_0_1_1454060246609_39040" class=""><span id="yui_3_16_0_1_1454060246609_40259" class="">But again the upper error message, did not go away.</span></span><span class=""></span></div><div id="yui_3_16_0_1_1454060246609_44868" dir="ltr"><br></div><div id="yui_3_16_0_1_1454060246609_44871" dir="ltr">Further googling found that this kind of issues may happen when trying <a id="yui_3_16_0_1_1454060246609_53919" class="edited-link-editor" href="http://stackoverflow.com/questions/8529313/how-do-i-call-a-vb6-com-object-from-c-sharp-with-dynamic-when-it-has-a-ref-param">to call methods in .NET from "<i>Interop COM objects</i>"</a>. But only if that method has "<i id="yui_3_16_0_1_1454060246609_52696">ref parameters</i>". Which <i id="yui_3_16_0_1_1454060246609_51547">Open</i> method does not. Here is the signature of the <i id="yui_3_16_0_1_1454060246609_53800">Open</i> method:</div><div id="yui_3_16_0_1_1454060246609_50434" dir="ltr"><br></div><blockquote id="yui_3_16_0_1_1454060246609_51577"><div id="yui_3_16_0_1_1454060246609_51560" dir="ltr">Help on method-descriptor Open Open(...)<br class="" id="yui_3_16_0_1_1454060246609_51549">    Open(self: ShapefileClass, ShapefileName: str, cBack: Callback) -> bool <br class="" id="yui_3_16_0_1_1454060246609_51551"><br class="" id="yui_3_16_0_1_1454060246609_51553">// MapWinGIS.ShapefileClass<br class="" id="yui_3_16_0_1_1454060246609_51555">[DispId(11)]<br class="" id="yui_3_16_0_1_1454060246609_51557">[MethodImpl(MethodImplOptions.InternalCall)]<br class="" id="yui_3_16_0_1_1454060246609_51559">public virtual extern bool Open([MarshalAs(UnmanagedType.BStr)] [In] string ShapefileName, [MarshalAs(UnmanagedType.Interface)] [In] ICallback cBack = null);</div></blockquote><div id="yui_3_16_0_1_1454060246609_51562" dir="ltr"><br>I would be very grateful for any kind of advice Stéphane.<br><br>Kind regards,<br></div><div id="yui_3_16_0_1_1454060246609_44870" dir="ltr">Djordje Spasic<br></div><div id="yui_3_16_0_1_1454060246609_45978" dir="ltr"><i class="" id="yui_3_16_0_1_1454060246609_37930"><br></i></div></div><br clear="none"></div><div class="yiv7853688039yqt4818227151" id="yiv7853688039yqt74311"></div></div></div></div><div id="yui_3_16_0_1_1454060246609_37919" class=".yiv7853688039yahoo_quoted">  <div id="yiv7853688039yui_3_16_0_1_1454085077485_6537" style="font-family:verdana, helvetica, sans-serif;font-size:13px;"> <div id="yiv7853688039yui_3_16_0_1_1454085077485_6536" style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"> <div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6535"> <font id="yiv7853688039yui_3_16_0_1_1454085077485_6534" size="2" face="Arial"> </font><hr id="yiv7853688039yui_3_16_0_1_1454085077485_6648" size="1"> <b><span style="font-weight:bold;">From:</span></b> Stéphane Lozier <stephane.lozier@gmail.com><br clear="none"> <b><span style="font-weight:bold;">To:</span></b> Djordje Spasic <issworld2000@yahoo.com> <br clear="none"><b id="yiv7853688039yui_3_16_0_1_1454085077485_6664"><span id="yiv7853688039yui_3_16_0_1_1454085077485_6663" style="font-weight:bold;">Cc:</span></b> "ironpython-users@python.org" <ironpython-users@python.org><br clear="none"> <b id="yiv7853688039yui_3_16_0_1_1454085077485_6666"><span id="yiv7853688039yui_3_16_0_1_1454085077485_6665" style="font-weight:bold;">Sent:</span></b> Friday, January 29, 2016 5:24 PM<br clear="none"> <b id="yiv7853688039yui_3_16_0_1_1454085077485_6977"><span id="yiv7853688039yui_3_16_0_1_1454085077485_6976" style="font-weight:bold;">Subject:</span></b> Re: [Ironpython-users] Cannot create instances of that class because it is abstract<br clear="none">  </div> <div class="yiv7853688039y_msg_container" id="yiv7853688039yui_3_16_0_1_1454085077485_6612"><br clear="none"><div id="yiv7853688039"><div id="yiv7853688039yui_3_16_0_1_1454085077485_6651"><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6650"><div id="yiv7853688039yui_3_16_0_1_1454085077485_6649">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.<br clear="none"><br clear="none"></div>You could try MapWinGIS.ShapefileClass() instead of MapWinGIS.Shapefile().<br clear="none"><br clear="none"><br clear="none"></div><div class="yiv7853688039gmail_extra" id="yiv7853688039yui_3_16_0_1_1454085077485_6706"><br clear="none"><div class="yiv7853688039gmail_quote" id="yiv7853688039yui_3_16_0_1_1454085077485_6705">On Mon, Jan 25, 2016 at 11:03 AM, Djordje Spasic via Ironpython-users <span dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6939"><<a rel="nofollow" shape="rect" id="yiv7853688039yui_3_16_0_1_1454085077485_6938" ymailto="mailto:ironpython-users@python.org" target="_blank" href="mailto:ironpython-users@python.org">ironpython-users@python.org</a>></span> wrote:<br clear="none"><blockquote class="yiv7853688039gmail_quote" id="yiv7853688039yui_3_16_0_1_1454085077485_6817" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="yiv7853688039yqt8297296795" id="yiv7853688039yqt61702"><div id="yiv7853688039yui_3_16_0_1_1454085077485_6816"><div id="yiv7853688039yui_3_16_0_1_1454085077485_6815" style="color:#000;background-color:#fff;font-family:verdana, helvetica, sans-serif;font-size:13px;"><div id="yiv7853688039yui_3_16_0_1_1454085077485_6814">Hello,<br clear="none"><br clear="none">I am trying to call a specific method ("Open") from the .NET assembly.</div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6942">The .NET assembly along with all other .dlls and necessary files, can be downloaded <a rel="nofollow" shape="rect" target="_blank" href="https://mapwindow4.codeplex.com/releases/view/110244">from here</a>. It's free an open source project: MapWindow.</div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6818"><br clear="none"></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6893">In their <a rel="nofollow" shape="rect" target="_blank" href="http://www.mapwindow.org/documentation/mapwingis4.9/examples.html">examples page</a>, by loading the <i>Interop.MapWinGIS.dll</i> file, they call the <i>MapWinGIS.</i><span id="yiv7853688039yui_3_16_0_1_1454085077485_6892"><i id="yiv7853688039yui_3_16_0_1_1454085077485_6941">Shapefile.Open()</i> method like so:</span></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6891"><br clear="none"></div><blockquote id="yiv7853688039yui_3_16_0_1_1454085077485_6822"><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6960"><span><span>using MapWinGIS;</span></span></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6961"><br clear="none"><span><span></span></span></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6821"><span><span>string </span></span><span><span>shpfilename = "</span></span><span id="yiv7853688039yui_3_16_0_1_1454085077485_6820"><span id="yiv7853688039yui_3_16_0_1_1454085077485_6819">C:/example.shp";<br clear="none"></span></span></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6825"><span id="yiv7853688039yui_3_16_0_1_1454085077485_6824"><span id="yiv7853688039yui_3_16_0_1_1454085077485_6823">Shapefile sf = new Shapefile();<br clear="none">if (sf.<b id="yiv7853688039yui_3_16_0_1_1454085077485_6949">Open</b>(</span></span><span id="yiv7853688039yui_3_16_0_1_1454085077485_6890"><span id="yiv7853688039yui_3_16_0_1_1454085077485_6889">shpfilename, null))<br clear="none">{<br clear="none">}</span></span><span></span><b><br clear="none"></b></div></blockquote><div id="yui_3_16_0_1_1454060246609_37925"><br clear="none"></div><div id="yiv7853688039yui_3_16_0_1_1454085077485_6948">However, when I try the same thing in ironpython:</div><div id="yiv7853688039yui_3_16_0_1_1454085077485_6828"><br clear="none"></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6829">    import clr<br clear="none">    import os<br clear="none">    <br clear="none">    shpfilename = "C:/example.shp"<br clear="none">    dllsfilename = "C:/mapwindow_dlls"<br clear="none">    <br clear="none">    clr.AddReferenceToFileAndPath(os.path.join(dllsfilename, "Interop.MapWinGIS.dll"))<br clear="none">    print "Interop.MapWinGIS.dll loaded: ", "Interop.MapWinGIS" in [assembly.GetName().Name for assembly in clr.References]  # prints: True<br clear="none">    import MapWinGIS<br clear="none">    <br clear="none">    sf = MapWinGIS.Shapefile()  # raises Error<br clear="none">    sf.<b>Open</b>(shpfilename, None)<br clear="none"></div><div id="yiv7853688039yui_3_16_0_1_1454085077485_6833"><br clear="none"></div><div id="yiv7853688039yui_3_16_0_1_1454085077485_6834"><br clear="none"></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6835">I am getting an error message:</div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6836"><br clear="none"></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6888"><i id="yiv7853688039yui_3_16_0_1_1454085077485_6887">   "Message: Cannot create instances of Shapefile because it is abstract"</i></div><div dir="ltr" id="yiv7853688039yui_3_16_0_1_1454085077485_6837"><span></span><span><br clear="none">Why is this happening?</span></div><div id="yui_3_16_0_1_1454060246609_56363" dir="ltr"><br clear="none"><span></span></div><div id="yui_3_16_0_1_1454060246609_56364" dir="ltr">I contacted the author of the project, but couldn't solve the issue.</div><div dir="ltr"><br clear="none"></div><div dir="ltr">Any kind of advice would be helpful.</div><div dir="ltr"><br clear="none"></div><div dir="ltr">Kind regards,<br clear="none">Djordje Spasic<br clear="none"><span></span></div><div dir="ltr"><span></span><br clear="none"></div></div></div></div><br clear="none">_______________________________________________<br clear="none">
Ironpython-users mailing list<br clear="none">
<a rel="nofollow" shape="rect" ymailto="mailto:Ironpython-users@python.org" target="_blank" href="mailto:Ironpython-users@python.org">Ironpython-users@python.org</a><br clear="none">
<a rel="nofollow" shape="rect" target="_blank" href="https://mail.python.org/mailman/listinfo/ironpython-users">https://mail.python.org/mailman/listinfo/ironpython-users</a><br clear="none">
<br clear="none"></blockquote></div><br clear="none"></div></div></div><br clear="none"><br clear="none"></div> </div> </div>  </div></div></body></html>