2009-06-12 Robert Jordan <robertj@gmx.net>
authorRobert Jordan <robertj@gmx.net>
Fri, 12 Jun 2009 20:41:58 +0000 (20:41 -0000)
committerRobert Jordan <robertj@gmx.net>
Fri, 12 Jun 2009 20:41:58 +0000 (20:41 -0000)
* cominterop.c (cominterop_get_ccw): Increment mspec's SizeParamIndex
because "this" of the managed signature has become an
ordinary parameter in the unmanaged signature.

svn path=/trunk/mono/; revision=136029

mono/metadata/ChangeLog
mono/metadata/cominterop.c

index 8093e3efca0d16c699c245e9a76544e58ffde4e2..2713ebef9476cead04c01a157cbe12647bc41149 100644 (file)
@@ -1,3 +1,9 @@
+2009-06-12  Robert Jordan  <robertj@gmx.net>
+
+       * cominterop.c (cominterop_get_ccw): Increment mspec's SizeParamIndex
+       because "this" of the managed signature has become an
+       ordinary parameter in the unmanaged signature.
+
 2009-06-12  Zoltan Varga  <vargaz@gmail.com>
 
        * class-internals.h (struct _MonoGenericContainer): Add an 'image'
index b240c665366c0cc427deaf9c19652d9483b4e6b6..ad29cfb337e4a25ce98ad8981031a743238bf17e 100644 (file)
@@ -1917,6 +1917,12 @@ cominterop_get_ccw (MonoObject* object, MonoClass* itf)
                                                mspecs[mspec_index] = g_new0 (MonoMarshalSpec, 1);
                                                mspecs[mspec_index]->native = MONO_NATIVE_VARIANTBOOL;
                                        }
+                               } else {
+                                       /* increase SizeParamIndex since we've added a param */
+                                       if (sig_adjusted->params[param_index]->type == MONO_TYPE_ARRAY ||
+                                           sig_adjusted->params[param_index]->type == MONO_TYPE_SZARRAY)
+                                               if (mspecs[mspec_index]->data.array_data.param_num != -1)
+                                                       mspecs[mspec_index]->data.array_data.param_num++;
                                }
                        }