All pastes #612112 Raw Edit

Mine

public text v1 · immutable
·published 2007-07-10 06:04 UTC
rendered paste body
	class CrossDomainHelper : MarshalByRefObject {
		public void Invoke (UnmanagedEventHandler handler, IntPtr target, IntPtr calldata, IntPtr closure) {
			Console.WriteLine ("Helper.Invoke called in domain {0}", AppDomain.CurrentDomain.FriendlyName);
			handler (target, calldata, closure);
		}
	}
	[Serializable]
	class CrossDomainProxy {

		public CrossDomainProxy (AppDomain domain, UnmanagedEventHandler handler)
		{
			Console.WriteLine ("Created proxy in domain {0}", domain.FriendlyName);
			this.domain = domain;
			this.handler = handler;
			_wrapper = new UnmanagedEventHandler (wrapper);

			try {
				this.helper = (CrossDomainHelper)domain.CreateInstanceAndUnwrap (typeof (CrossDomainHelper).Assembly.FullName,
												 "Mono.CrossDomainHelper");
			}
			catch (Exception e) {
				Console.WriteLine (e);
			}
		}
		
		public UnmanagedEventHandler Wrapper {
			get { return _wrapper; }
		}

		public void wrapper (IntPtr target, IntPtr calldata, IntPtr closure) {
			Console.WriteLine ("wrapper called in domain {0}", AppDomain.CurrentDomain.FriendlyName);
			Console.WriteLine (" +  domain = {0}", domain.FriendlyName);
			this.target = target;
			this.calldata = calldata;
			this.closure = closure;
			helper.Invoke (handler, target, calldata, closure);
		}

		public CrossDomainHelper helper;
		public AppDomain domain;
		public UnmanagedEventHandler handler;
		public UnmanagedEventHandler _wrapper;

		public IntPtr target;
		public IntPtr calldata;
		public IntPtr closure;
	}