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; } } 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)); } void call_in_target_domain () { Console.WriteLine ("call_in_target_domain called in domain {0}", AppDomain.CurrentDomain.FriendlyName); handler (target, calldata, closure); } AppDomain domain; UnmanagedEventHandler handler; UnmanagedEventHandler _wrapper; IntPtr target; IntPtr calldata; IntPtr closure; }