using System;
using System.Reflection;
using System.Runtime.Remoting;
class MyClass {
public void MethodA(DateTime dt) {
Console.WriteLine("MethodA invoked at " + dt.ToLongTimeString());
}
}
class Starter {
static void Main() {
CreateLocal();
CreateRemote1();
CreateRemote2();
}
static void CreateLocal() {
object obj = Activator.CreateInstance(typeof(MyClass));
((MyClass)obj).MethodA(DateTime.Now);
}
static void CreateRemote1() {
ObjectHandle hObj = Activator.CreateInstance("library","MyClass");
object obj = hObj.Unwrap();
MethodInfo method = obj.GetType().GetMethod("MethodA");
method.Invoke(obj, new object[1] { DateTime.Now });
}
static void CreateRemote2() {
AppDomain domain = AppDomain.CurrentDomain;
object obj = domain.CreateInstanceFromAndUnwrap("library.dll","MyClass");
MethodInfo method = obj.GetType().GetMethod("MethodA");
method.Invoke(obj, new object[1] { DateTime.Now });
}
}