Merge pull request #3948 from henricm/fix-pinvoke-utf8-windows
[mono.git] / mono / metadata / marshal.h
index 66fa99a91d5cdb740739a102268e49a5f377781c..e22653f2d5bd2f1538e4c02e1f451bca53a067b2 100644 (file)
@@ -39,6 +39,7 @@ typedef struct {
        MonoMethodPInvoke *piinfo;
        int *orig_conv_args; /* Locals containing the original values of byref args */
        int retobj_var;
+       int vtaddr_var;
        MonoClass *retobj_class;
        MonoMethodSignature *csig; /* Might need to be changed due to MarshalAs directives */
        MonoImage *image; /* The image to use for looking up custom marshallers */
@@ -190,6 +191,10 @@ typedef struct {
        MonoMethodSignature *sig;
 } GsharedvtWrapperInfo;
 
+typedef struct {
+       MonoMethod *method;
+} DelegateInvokeWrapperInfo;
+
 /*
  * This structure contains additional information to uniquely identify a given wrapper
  * method. It can be retrieved by mono_marshal_get_wrapper_info () for certain types
@@ -230,6 +235,8 @@ typedef struct {
                RemotingWrapperInfo remoting;
                /* GSHAREDVT_IN_SIG/GSHAREDVT_OUT_SIG */
                GsharedvtWrapperInfo gsharedvt;
+               /* DELEGATE_INVOKE */
+               DelegateInvokeWrapperInfo delegate_invoke;
        } d;
 } WrapperInfo;
 
@@ -268,7 +275,10 @@ gpointer
 mono_string_to_ansibstr (MonoString *string_obj);
 
 gpointer
-mono_string_to_bstr (MonoString *string_obj);
+mono_ptr_to_bstr (gpointer ptr, int slen);
+
+gpointer
+mono_string_to_bstr(MonoString* str);
 
 void mono_delegate_free_ftnptr (MonoDelegate *delegate);
 
@@ -465,6 +475,9 @@ ves_icall_System_Runtime_InteropServices_Marshal_OffsetOf (MonoReflectionType *t
 gpointer
 ves_icall_System_Runtime_InteropServices_Marshal_StringToBSTR (MonoString *string);
 
+gpointer
+ves_icall_System_Runtime_InteropServices_Marshal_BufferToBSTR (MonoArray *ptr, int len);
+
 gpointer
 ves_icall_System_Runtime_InteropServices_Marshal_StringToHGlobalAnsi (MonoString *string);
 
@@ -477,6 +490,9 @@ ves_icall_System_Runtime_InteropServices_Marshal_DestroyStructure (gpointer src,
 void*
 ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMem (int size);
 
+void*
+ves_icall_System_Runtime_InteropServices_Marshal_AllocCoTaskMemSize (gulong size);
+
 void
 ves_icall_System_Runtime_InteropServices_Marshal_FreeCoTaskMem (void *ptr);
 
@@ -592,7 +608,10 @@ void
 mono_marshal_use_aot_wrappers (gboolean use);
 
 MonoObject *
-mono_marshal_xdomain_copy_value (MonoObject *val);
+mono_marshal_xdomain_copy_value (MonoObject *val, MonoError *error);
+
+MonoObject *
+ves_icall_mono_marshal_xdomain_copy_value (MonoObject *val);
 
 int
 mono_mb_emit_save_args (MonoMethodBuilder *mb, MonoMethodSignature *sig, gboolean save_this);
@@ -609,6 +628,11 @@ mono_mb_create_and_cache_full (GHashTable *cache, gpointer key,
                                                           MonoMethodBuilder *mb, MonoMethodSignature *sig,
                                                           int max_stack, WrapperInfo *info, gboolean *out_found);
 
+typedef void (*MonoFtnPtrEHCallback) (guint32 gchandle);
+
+MONO_API void
+mono_install_ftnptr_eh_callback (MonoFtnPtrEHCallback callback);
+
 G_END_DECLS
 
 #endif /* __MONO_MARSHAL_H__ */