Esempio n. 1
0
    private Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
    {
        Assembly ret;
        String my_name = args.Name;
        int pos        = my_name.IndexOf(",");

        if (pos != -1)
        {
            my_name = my_name.Substring(0, pos);
        }

        instances = get_domain_hashtable();

        ret = (Assembly)instances [my_name];

        if (ret == null)
        {
            try
            {
#if MONO
                ret = LoadAssemblyFromVirtuoso(my_name);
                instances [my_name] = ret;
#else
                int currp           = GetModuleHandle(null);
                int proc_addr       = GetProcAddress(currp, "dotnet_unmanaged_call");
                IntPtr str1         = Marshal.StringToCoTaskMemAnsi(my_name);
                byte_size_ptr_t arg = new byte_size_ptr_t();
                arg.size = 0;
                arg.data = IntPtr.Zero;
                arg.name = str1;
                int thr_id = CreateThread(0, 0, proc_addr, ref arg, 0, 0);
                WaitForSingleObject(thr_id, INFINITE);
                CloseHandle(thr_id);
                Marshal.FreeCoTaskMem(str1);
                if (arg.size > 0 && arg.data != IntPtr.Zero)
                {
                    byte [] bytes = new byte[arg.size];
                    Marshal.Copy(arg.data, bytes, 0, arg.size);
                    Marshal.FreeCoTaskMem(arg.data);
                    arg.data = IntPtr.Zero;
                    ret      = Assembly.Load(bytes);

                    instances [my_name] = ret;
                }
                else
                {
                    return(null);
                }
#endif
            }
            catch
            {
                return(null);
            }
        }

        return(ret);
    }
Esempio n. 2
0
 private static extern int CreateThread(int SecurityAttributes, System.UInt32 stack_size,
                                        int start_routine, ref byte_size_ptr_t my_data, UInt32 flags, int thr_id);
Esempio n. 3
0
 private static extern int CreateThread (int SecurityAttributes, System.UInt32 stack_size,
   int start_routine, ref byte_size_ptr_t my_data, UInt32 flags, int thr_id);
Esempio n. 4
0
  private Assembly MyResolveEventHandler (object sender, ResolveEventArgs args)
    {
      Assembly ret;
      String my_name = args.Name;
      int pos = my_name.IndexOf (",");

      if (pos != -1)
	my_name = my_name.Substring (0, pos);

      instances = get_domain_hashtable ();

      ret = (Assembly) instances [my_name];

      if (ret == null)
	{
	try
	  {
#if MONO
	    ret = LoadAssemblyFromVirtuoso (my_name);
	    instances [my_name] = ret;
#else
	    int currp = GetModuleHandle (null);
	    int proc_addr = GetProcAddress (currp, "dotnet_unmanaged_call");
	    IntPtr str1 = Marshal.StringToCoTaskMemAnsi (my_name);
	    byte_size_ptr_t arg = new byte_size_ptr_t ();
	    arg.size = 0;
	    arg.data = IntPtr.Zero;
	    arg.name = str1;
	    int thr_id = CreateThread (0, 0, proc_addr, ref arg, 0, 0);
	    WaitForSingleObject (thr_id, INFINITE);
	    CloseHandle (thr_id);
	    Marshal.FreeCoTaskMem (str1);
	    if (arg.size > 0 && arg.data != IntPtr.Zero)
	      {
		byte [] bytes = new byte[arg.size];
		Marshal.Copy (arg.data, bytes, 0, arg.size);
		Marshal.FreeCoTaskMem (arg.data);
		arg.data = IntPtr.Zero;
		ret = Assembly.Load (bytes);

		instances [my_name] = ret;
	      }
	    else
	      return null;
#endif
	  }
	catch
	  {
	    return null;
	  }
      }

    return ret;
  }