<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:D="DAV:" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I could be asking the obvious but do square brackets work for
you?<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I would expect:<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal>result=win32com.client.Dispatch("COMClass")["ItemName"]<o:p></o:p></p>
<p class=MsoNormal>result=win32com.client.Dispatch("COMClass")[0]<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>to work or possibly:<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>result=win32com.client.Dispatch("COMClass").Item[0]<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Another possibility is selecting the overloads on get_Item. I
don’t know why we’d think there’d be two object versions but bound methods will
have an “Overloads” property (after importing clr or another .NET namespace)
which might help you (I’m not sure it will, but it’s worth a shot).<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Finally I would suggest that you could also look into making a PIA
(Primary Interop Assembly) for your COM objects if you have a TLB instead of writing
your own dispatch code. A tool ships w/ the .NET framework called tlbimp so if
you have a TLB for your COM objects you can use that to generate an assembly.
Add a reference to that assembly and you might find that you have a better COM
experience. Unfortunately that only helps if you have a TLB available.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Hopefully one of those will help.<o:p></o:p></span></p>
<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p> </o:p></span></p>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> users-bounces@lists.ironpython.com
[mailto:users-bounces@lists.ironpython.com] <b>On Behalf Of </b>Martin<br>
<b>Sent:</b> Wednesday, July 11, 2007 7:45 AM<br>
<b>To:</b> users@lists.ironpython.com<br>
<b>Subject:</b> [IronPython] "TypeError: Microsoft.Scripting.DynamicType
is not callable" bug(?)<o:p></o:p></span></p>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<div>
<p class=MsoNormal>Hi,<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal><strong>Background:</strong><o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>We have a number of Python scripts that we use for updating
and setting up the devices my company make. We do this through calls to a
number of COM classes via win32com.client.Dispatch().<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>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.<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>My goal is to make our CPython code as 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 the specific COM classes we need to call when setting up our
devices: <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>namespace win32com<br>
{<br>
public class client<br>
{<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> public
static object Dispatch(string comName)<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>
{<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>
<rip><o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>
}<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> }<br>
}<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal><br>
The annoying thing is that this "hack" works like a charm
except in one type of case.<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal><strong>Problem:</strong><o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>Some of our COM classes return Item collections that are
indexable by both specific names (string indexing) and normal int indexes<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>- example in CPython:
result=win32com.client.Dispatch("COMClass")("ItemName") and/or
result=win32com.client.Dispatch("COMClass")(0)<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>This works like a charm in CPython (and the interop version
of our C# code for that matter) but it does NOT work in IronPython.<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>In IronPython 1.1 I get this error message "TypeError:
object is not callable"<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>In IronPython 2.0 alpha 3 I get this error message:
"TypeError: Microsoft.Scripting.DynamicType is not callable".<o:p></o:p></p>
</div>
<div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>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("ItemName"). It gives the following error message<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>TypeError: multiple overloads of get_Item could match
(String)<br>
get_Item(Object)<br>
get_Item(Object)<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>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.<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>So apparently IronPython cannot identify the type
of the index objects when more are present?<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal><strong>Question</strong><o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>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?<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>(I know I can get around the problem by
writing specific IronPython code + changing the handling of the COM class
in my C# wrapper but I REALLY don't want to nor should I have to if the goal is
to make IronPython as clean as possible port of CPython.) <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>PS.<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>Great initiative and great work otherwise in the port<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>BR<o:p></o:p></p>
</div>
<div>
<p class=MsoNormal>Martin Storm Møller<o:p></o:p></p>
</div>
</div>
<div>
<p class=MsoNormal> <o:p></o:p></p>
</div>
</div>
</body>
</html>