All pastes #612041 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-07-10 04:43 UTC
rendered paste body
using System;

public delegate void UnmanagedEventHandler (IntPtr target, IntPtr calldata, IntPtr closure);


[Serializable]
public 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);
	}

		
	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;
		domain.DoCallBack (new CrossAppDomainDelegate (call_in_target_domain));
	}

	public void call_in_target_domain ()
	{
		Console.WriteLine ("call_in_target_domain called in domain {0}", AppDomain.CurrentDomain.FriendlyName);
		handler (target, calldata, closure);
	}

	public AppDomain domain;
	public UnmanagedEventHandler handler;
	public UnmanagedEventHandler _wrapper;

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

	public static void Main (string[] args) {
		AppDomain cd = AppDomain.CreateDomain ("my app domain");

		CrossDomainProxy proxy = new CrossDomainProxy (cd, new UnmanagedEventHandler (Foo));

		proxy.Wrapper (IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
	}

	public static void Foo (IntPtr targe, IntPtr calldata, IntPtr closure) {
		Console.WriteLine ("hi from Foo on AppDomain {0}", AppDomain.CurrentDomain.FriendlyName);
	}
}