Thank you for the snippets.  I had poured over the unit tests and seen similar 
examples of how to do this already, but two commentless replies inspired me to 
trace through this in a debugger.

The issue ended up being that I was erroneously under the impression I was 
calling a static method, and was retrieving the method off of the 'type' 
object, rather than an instance of the type.  The error you get back is the 
generic "no method matches given arguments", because my local 'desired_method' 
expected an initial 'self' argument, and so silently took 'arg_a' to be 'self'. 
 This meant MethodBinder.Bind() only thought it had 1 input argument and could 
not match it to any of the overloads.

Cheers,

Adrian Perez


-----Original Message-----
From: BCline [mailto:bcline3...@charter.net] 
Sent: Tuesday, May 17, 2011 12:56 AM
Cc: Adrian Perez; pythondotnet@python.org
Subject: Re: [Python.NET] issue disambiguating overloaded method UPDATE


from System import String, Char, Int32
def TestCharArray():
     from System import Array
     charArrType = Array[Char]
     ##arrType = charArrType('hello')
     ##for char in arrType:
     ##    print char,
     ## Also works on instances of the type! ##
     strCharArr = String.__overloads__[charArrType]
     s = strCharArr(list('hello'))
     print s
TestCharArray()

On 5/17/2011 12:38 AM, Barton wrote:
>
> def TestCharArray():
>     from System import Array
>     charArrType = Array[Char]
>     ##arrType = charArrType('hello')
>     ##for char in arrType:
>     ##    print char,
>     ## Also works on instances of the type! ##
>     strCharArr = s.__overloads__[charArrType]
>     s = strCharArr(list('hello'))
>     print s
>
> On 5/16/2011 6:29 PM, Adrian Perez wrote:
>> Hello everyone,
>>
>> This is probably a total n00b question, but I've been using pythonnet 
>> in our toolchain to communicate with a private c# assembly for months 
>> now without ever running into a problem I couldn't eventually figure 
>> out.  This one has me totally stumped, and I'm hoping something 
>> obvious will jump out at experienced eyes.
>>
>> (I did a find/replace for secrecy, besides silly names these are the 
>> raw results I get back)
>>
>> A C# class exposes a method 'WriteByte' that has 5 overloads (note 
>> that only one of them takes 2 arguments):
>>
>>>>> accessor= MyCompany.SomeNamespace.SomeTypeArrayAccessor
>>>>> accessor.WriteByte.__overloads__
>> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, Byte[]) Boolean 
>> WriteByte(MyCompany.SomeNamespace.SomeType, Byte[], Int32 ByRef) 
>> Boolean WriteByte(MyCompany.SomeNamespace.SomeType,
>> System.Collections.Generic.IEnumerable`1[System.Byte], Int32 ByRef) 
>> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, Int32, 
>> System.Collections.Generic.IEnumerable`1[System.Byte], Int32 ByRef) 
>> Boolean WriteByte(MyCompany.SomeNamespace.SomeType, Int32, Byte[],
>> Int32 ByRef)
>>
>> I attempt to disambiguate by selecting the 2-arg method I want by type:
>>
>>>>> desired_method=
>>>>> accessor.WriteByte.__overloads__[MyCompany.SomeNamespace.SomeType,
>>>>> System.Array[System.Byte]]
>> The problem may be right here - if I print out desired_method.__doc__ 
>> I get the same 5 methods listed above.  Anyway, then I compute my 
>> arguments, and can verify they have the types I expect (If it 
>> matters, arg_b is created by a call to
>> System.IO.BinaryReader.ReadBytes()):
>>
>>>>> arg_a= ...
>>>>> arg_b= ...
>>>>> type(arg_a)
>> <class 'MyCompany.SomeNamespace.SomeType'>
>>>>> type(arg_b)
>> <class 'System.Byte[]'>
>>
>> However, when I try to call the disambiguated method with the correct 
>> args, I get no love:
>>
>>>>> result= desired_method(arg_a, arg_b)
>> Traceback (most recent call last):
>>    File "<string>", line 1, in<fragment>
>> TypeError: No method matches given arguments
>>
>> Does anyone see the obvious thing I'm doing wrong?  Disambiguating 
>> can be a pain but I've done it before for other methods and have 
>> never had such an impossible time getting the correct method called.
>>
>> Thanks,
>>
>> Adrian Perez
>> _________________________________________________
>> Python.NET mailing list - PythonDotNet@python.org 
>> http://mail.python.org/mailman/listinfo/pythondotnet
>>
_________________________________________________
Python.NET mailing list - PythonDotNet@python.org
http://mail.python.org/mailman/listinfo/pythondotnet

Reply via email to