class CrossDomainProxy { public CrossDomainProxy (AppDomain domain, UnmanagedEventHandler handler) { this.domain = domain; this.handler = handler; _wrapper = new UnmanagedEventHandler (wrapper); } public UnmanagedEventHandler Wrapper { get { return _wrapper; } } void wrapper (IntPtr target, IntPtr calldata, IntPtr closure) { this.target = target; this.calldata = calldata; this.closure = closure; domain.DoCallBack (new CrossAppDomainDelegate (call_in_target_domain)); } void call_in_target_domain () { handler (target, calldata, closure); } AppDomain domain; UnmanagedEventHandler handler; UnmanagedEventHandler _wrapper; IntPtr target; IntPtr calldata; IntPtr closure; }