- /* Lookup the virtual method */
- mono_class_setup_vtable (klass);
- g_assert (klass->vtable);
- vt_slot = mono_method_get_vtable_slot (cmethod);
- if (cmethod->klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
- int iface_offset;
-
- iface_offset = mono_class_interface_offset (klass, cmethod->klass);
- g_assert (iface_offset != -1);
- vt_slot += iface_offset;
+ if (mono_method_signature (cmethod)->pinvoke) {
+ /* Object.GetType () */
+ m = mono_marshal_get_native_wrapper (cmethod, TRUE, FALSE);
+ } else {
+ /* Lookup the virtual method */
+ mono_class_setup_vtable (klass);
+ g_assert (klass->vtable);
+ vt_slot = mono_method_get_vtable_slot (cmethod);
+ if (cmethod->klass->flags & TYPE_ATTRIBUTE_INTERFACE) {
+ int iface_offset;
+
+ iface_offset = mono_class_interface_offset (klass, cmethod->klass);
+ g_assert (iface_offset != -1);
+ vt_slot += iface_offset;
+ }
+ m = klass->vtable [vt_slot];