<div>Hi,</div>
<div>&nbsp;</div>
<div><strong>Background:</strong></div>
<div>We have a number of Python scripts that we use for updating and setting up the devices my company make. We do this&nbsp;through calls to a number of COM classes&nbsp;via win32com.client.Dispatch().</div>
<div>&nbsp;</div>
<div>We are interested in being able to call these Python scripts from various .NET GUI applications written in C# so naturally I started looking into IronPython.</div>
<div>&nbsp;</div>
<div>My goal is to make&nbsp;our CPython code as&nbsp;executable in IronPython as humanly possible so since win32com is not available through IronPython I wrote a simple C# interop wrapper handling the interops for&nbsp;the specific&nbsp;COM classes we need to call when setting up our devices:
</div>
<div>&nbsp;</div>
<div>namespace win32com<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public class client<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public static object Dispatch(string comName)</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;rip&gt;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>}</div>
<div><br>The annoying thing is that&nbsp;this &quot;hack&quot;&nbsp;works like a charm except in one type of case.</div>
<div>&nbsp;</div>
<div><strong>Problem:</strong></div>
<div>Some of our COM classes return Item collections that are indexable by both specific names (string indexing)&nbsp;and normal int indexes</div>
<div>-&nbsp;example in CPython: result=win32com.client.Dispatch(&quot;COMClass&quot;)(&quot;ItemName&quot;)&nbsp;and/or result=win32com.client.Dispatch(&quot;COMClass&quot;)(0)</div>
<div>&nbsp;</div>
<div>This works like a charm in CPython (and the interop version of our C# code for that matter) but it does&nbsp;NOT work in IronPython.</div>
<div>In IronPython 1.1 I get this error message &quot;TypeError: object is not callable&quot;</div>
<div>In IronPython 2.0 alpha 3 I get this error message: &quot;TypeError: Microsoft.Scripting.DynamicType is not callable&quot;.</div>
<div>
<div>&nbsp;</div>
<div>I can access the properties of the object such as item count however I cannot index into the result object by calling result.get_Item(&quot;ItemName&quot;). It gives the following error message</div>
<div>&nbsp;</div>
<div>TypeError: multiple overloads of get_Item could match (String)<br>&nbsp; get_Item(Object)<br>&nbsp; get_Item(Object)</div>
<div>&nbsp;</div>
<div>nor can I index into the result object by calling result.get_Item(0) which gives a similar error except the problematic match is Int32.</div>
<div>&nbsp;</div>
<div>So&nbsp;apparently&nbsp;IronPython cannot identify the type of the index objects when more are present?</div>
<div>&nbsp;</div>
<div><strong>Question</strong></div>
<div><strong></strong>&nbsp;</div>
<div>Anyone have any comments that can help me here? Have I missed some subtle issues with COM interop? Is this a known bug and if so when do you think it will be fixed?</div>
<div>&nbsp;</div>
<div>(I know I can get around the problem by writing&nbsp;specific IronPython code + changing the handling of the COM class in my C# wrapper but I REALLY don&#39;t want to nor should I have to if the goal is to make IronPython as clean as possible port of CPython.)
</div>
<div>&nbsp;</div>
<div>PS.</div>
<div>Great initiative and great work otherwise in the port</div>
<div>&nbsp;</div>
<div>BR</div>
<div>Martin Storm Møller</div></div>
<div>&nbsp;</div>