Merge from HEAD.
authorZoltan Varga <vargaz@gmail.com>
Fri, 17 Sep 2004 18:35:00 +0000 (18:35 -0000)
committerZoltan Varga <vargaz@gmail.com>
Fri, 17 Sep 2004 18:35:00 +0000 (18:35 -0000)
svn path=/branches/mono-1-0/mono/; revision=34021

mono/metadata/ChangeLog
mono/metadata/loader.c

index 54f3c036db1948f4fd38985aefd166fceffb8151..2718f5b0f847b669692b4b7730882682e6672cbe 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-17  Zoltan Varga  <vargaz@freemail.hu>
+
+       * loader.c (mono_lookup_pinvoke_call): Add support for stdcall name
+       mangling.
+
 2004-09-16  Lluis Sanchez Gual  <lluis@novell.com>
  
        * locales.c: nullify the ICU_collator member of CompareInfo when it is
index 5521d6f3299d6fb95c063f82517083b7972bbaa9..8e278e6fefff04815be300a3312558d08060050c 100644 (file)
@@ -725,6 +725,21 @@ mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char
                               
                        break;                                  
                }
+
+#ifdef PLATFORM_WIN32
+               /* Try the stdcall mangled name */
+               if (!method->addr) {
+                       /* FIX: Compute this correctly */
+                       mangled_name = g_strdup_printf ("%s@%d", import, method->signature->param_count * sizeof (gpointer));
+                       g_module_symbol (gmodule, mangled_name, &method->addr); 
+                       g_free (mangled_name);
+               }
+               if (!method->addr) {
+                       mangled_name = g_strdup_printf ("_%s@%d", import, method->signature->param_count * sizeof (gpointer));
+                       g_module_symbol (gmodule, mangled_name, &method->addr); 
+                       g_free (mangled_name);
+               }
+#endif
        }
 
        if (!method->addr) {