Hello all,
If I instantiate an object via AppDomain.CreateInstance , and this object's class has a constructor with parameters, I get the exception Unhandled Exception: System.MissingMethodException: Constructor not found. though needed parameters are passed to AppDomain.CreateInstance I found it out trying an example from Programming C#, 2nd edition. This example runs on MS .NET and fails on Mono. Here is it : ==================================== using System; using System.Runtime.Remoting; using System.Reflection; namespace ProgCSharp { // for marshal by reference comment out // the attribute and uncomment the base class [Serializable] public class Point // : MarshalByRefObject { public Point (int x, int y) { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point constructor"); this.x = x; this.y = y; } public int X { get { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point x.get"); return this.x; } set { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point x.set"); this.x = value; } } public int Y { get { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point y.get"); return this.y; } set { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Point y.set"); this.y = value; } } private int x; private int y; } // the shape class marshals by reference public class Shape : MarshalByRefObject { public Shape(int upperLeftX, int upperLeftY) { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Shape constructor"); upperLeft = new Point(upperLeftX, upperLeftY); } public Point GetUpperLeft( ) { return upperLeft; } public void ShowUpperLeft( ) { Console.WriteLine( "[{0}] Upper left: {1},{2}", System.AppDomain.CurrentDomain.FriendlyName, upperLeft.X, upperLeft.Y); } private Point upperLeft; } public class Tester { public static void Main( ) { Console.WriteLine( "[{0}] {1}", System.AppDomain.CurrentDomain.FriendlyName, "Entered Main"); // create the new app domain AppDomain ad2 = AppDomain.CreateDomain("Shape Domain"); // Assembly a = Assembly.LoadFrom("ProgCSharp.exe"); // Object theShape = a.CreateInstance("Shape"); // instantiate a Shape object ObjectHandle oh = ad2.CreateInstance( "ProgCSharp", "ProgCSharp.Shape", false, System.Reflection.BindingFlags.CreateInstance, null, new object[] {3, 5}, null, null, null ); Shape s1 = (Shape) oh.Unwrap( ); s1.ShowUpperLeft( ); // ask the object to display // get a local copy? proxy? Point localPoint = s1.GetUpperLeft( ); // assign new values localPoint.X = 500; localPoint.Y = 600; // display the value of the local Point object Console.WriteLine( "[{0}] localPoint: {1}, {2}", System.AppDomain.CurrentDomain.FriendlyName, localPoint.X, localPoint.Y); s1.ShowUpperLeft( ); // show the value once more } } } ==================================== Here is the output: [EMAIL PROTECTED]:~$ mono ProgCSharp.exe [ProgCSharp.exe] Entered Main Unhandled Exception: System.MissingMethodException: Constructor not found. Server stack trace: in <0x0019a> System.Activator:CreateInstance (System.Type,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[]) in <0x00074> System.Activator:CreateInstance (string,string,bool,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[],System.Security.Policy.Evidence) in <0x00055> System.AppDomain:CreateInstance (string,string,bool,System.Reflection.BindingFlags,System.Reflection.Binder,object[],System.Globalization.CultureInfo,object[],System.Security.Policy.Evidence) in (unmanaged) (wrapper managed-to-native) System.Runtime.Remoting.RemotingServices:InternalExecute (System.Reflection.MonoMethod,object,object[],object[]&) in <0x00004> (wrapper managed-to-native) System.Runtime.Remoting.RemotingServices:InternalExecute (System.Reflection.MonoMethod,object,object[],object[]&) in <0x00172> System.Runtime.Remoting.RemotingServices:InternalExecuteMessage (System.MarshalByRefObject,System.Runtime.Remoting.Messaging.IMethodCallMessage) Exception rethrown at [0]: in <0x00748> System.Runtime.Remoting.Proxies.RealProxy:PrivateInvoke (System.Runtime.Remoting.Proxies.RealProxy,System.Runtime.Remoting.Messaging.IMessage,System.Exception&,object[]&) ======================================= Does anyone have a clue to this incompatibility? -- Best regards, Yuri Leikind _______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list