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;
}