diff --git a/src/runtime/methodbinder.cs b/src/runtime/methodbinder.cs index 22aaf33e4..720a303e2 100644 --- a/src/runtime/methodbinder.cs +++ b/src/runtime/methodbinder.cs @@ -344,9 +344,13 @@ internal Binding Bind(IntPtr inst, IntPtr args, IntPtr kw, if (clrtype != null) { bool typematch = false; - if (pi[n].ParameterType != clrtype) + Type paramtype = pi[n].ParameterType; + if (pi[n].ParameterType.IsByRef) { + paramtype = pi[n].ParameterType.GetElementType(); + } + if (paramtype != clrtype) { - IntPtr pytype = Converter.GetPythonTypeByAlias(pi[n].ParameterType); + IntPtr pytype = Converter.GetPythonTypeByAlias(paramtype); pyoptype = Runtime.PyObject_Type(op); Exceptions.Clear(); if (pyoptype != IntPtr.Zero) @@ -364,7 +368,7 @@ internal Binding Bind(IntPtr inst, IntPtr args, IntPtr kw, if (!typematch) { // this takes care of enum values - TypeCode argtypecode = Type.GetTypeCode(pi[n].ParameterType); + TypeCode argtypecode = Type.GetTypeCode(paramtype); TypeCode paramtypecode = Type.GetTypeCode(clrtype); if (argtypecode == paramtypecode) { @@ -603,4 +607,4 @@ internal Binding(MethodBase info, Object inst, Object[] args, this.outs = outs; } } -} \ No newline at end of file +}