MonoError error;
MonoCustomAttrInfo *cinfo;
GPtrArray *ifaces;
- MonoBoolean visible = 0;
+ MonoBoolean visible = 1;
/* Handle the ComVisibleAttribute */
if (!ComVisibleAttribute)
}
}
- mono_marshal_emit_native_wrapper (method->klass->image, mb_native, sig_native, piinfo, mspecs, piinfo->addr, FALSE, TRUE);
+ mono_marshal_emit_native_wrapper (method->klass->image, mb_native, sig_native, piinfo, mspecs, piinfo->addr, FALSE, TRUE, FALSE);
res = mono_mb_create_method (mb_native, sig_native, sig_native->param_count + 16);
#endif
}
-MonoString *
-ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringBSTR (gpointer ptr)
-{
- MONO_ARCH_SAVE_REGS;
-
- return mono_string_from_bstr(ptr);
-}
-
-gpointer
-ves_icall_System_Runtime_InteropServices_Marshal_StringToBSTR (MonoString* ptr)
-{
- MONO_ARCH_SAVE_REGS;
-
- return mono_string_to_bstr(ptr);
-}
-
-void
-ves_icall_System_Runtime_InteropServices_Marshal_FreeBSTR (gpointer ptr)
-{
- MONO_ARCH_SAVE_REGS;
-
- mono_free_bstr (ptr);
-}
-
/**
* cominterop_get_ccw_object:
* @ccw_entry: a pointer to the CCWEntry
gpointer
mono_string_to_bstr (MonoString *string_obj)
{
- g_assert_not_reached ();
- return NULL;
+ if (!string_obj)
+ return NULL;
+#ifdef HOST_WIN32
+ return SysAllocStringLen (mono_string_chars (string_obj), mono_string_length (string_obj));
+#else
+ {
+ int slen = mono_string_length (string_obj);
+ /* allocate len + 1 utf16 characters plus 4 byte integer for length*/
+ char *ret = g_malloc ((slen + 1) * sizeof(gunichar2) + sizeof(guint32));
+ if (ret == NULL)
+ return NULL;
+ memcpy (ret + sizeof(guint32), mono_string_chars (string_obj), slen * sizeof(gunichar2));
+ * ((guint32 *) ret) = slen * sizeof(gunichar2);
+ ret [4 + slen * sizeof(gunichar2)] = 0;
+ ret [5 + slen * sizeof(gunichar2)] = 0;
+
+ return ret + 4;
+ }
+#endif
}
MonoString *
mono_string_from_bstr (gpointer bstr)
{
- g_assert_not_reached ();
- return NULL;
+ if (!bstr)
+ return NULL;
+#ifdef HOST_WIN32
+ return mono_string_new_utf16 (mono_domain_get (), bstr, SysStringLen (bstr));
+#else
+ return mono_string_new_utf16 (mono_domain_get (), bstr, *((guint32 *)bstr - 1) / sizeof(gunichar2));
+#endif
}
void
mono_free_bstr (gpointer bstr)
+{
+ if (!bstr)
+ return;
+#ifdef HOST_WIN32
+ SysFreeString ((BSTR)bstr);
+#else
+ g_free (((char *)bstr) - 4);
+#endif
+}
+
+int
+ves_icall_System_Runtime_InteropServices_Marshal_AddRefInternal (gpointer pUnk)
+{
+ g_assert_not_reached ();
+ return 0;
+}
+
+int
+ves_icall_System_Runtime_InteropServices_Marshal_ReleaseInternal (gpointer pUnk)
+{
+ g_assert_not_reached ();
+ return 0;
+}
+
+int
+ves_icall_System_Runtime_InteropServices_Marshal_QueryInterfaceInternal (gpointer pUnk, gpointer riid, gpointer* ppv)
{
g_assert_not_reached ();
+ return 0;
}
#endif /* DISABLE_COM */
+
+MonoString *
+ves_icall_System_Runtime_InteropServices_Marshal_PtrToStringBSTR (gpointer ptr)
+{
+ MONO_ARCH_SAVE_REGS;
+
+ return mono_string_from_bstr(ptr);
+}
+
+gpointer
+ves_icall_System_Runtime_InteropServices_Marshal_StringToBSTR (MonoString* ptr)
+{
+ MONO_ARCH_SAVE_REGS;
+
+ return mono_string_to_bstr(ptr);
+}
+
+void
+ves_icall_System_Runtime_InteropServices_Marshal_FreeBSTR (gpointer ptr)
+{
+ MONO_ARCH_SAVE_REGS;
+
+ mono_free_bstr (ptr);
+}