Ignore my previous post how to fix the problem. The obj->vtable contains raw pointers and not methods. I think we should handle the tp case in the runtime invoke method..
(I'm taking out my clown kit an putting it on today, I'm today's clown. :-) Cheers, Patrik > -----Original Message----- > From: Torstensson, Patrik [mailto:[EMAIL PROTECTED] > Sent: Tuesday, February 25, 2003 12:12 AM > To: Daniel Lopez > Cc: [EMAIL PROTECTED] > Subject: RE: [Mono-list] AppDomain > > > Hi Danel, > > I'm a bit late into the thread but I will try to give you > some hints of > how to fix this; > > klass = ((MonoTransparentProxy *)sampleApplicationHost)->klass; > > The TP->klass points to the real class object and we don't change that > vtable when creating a proxy (the proxies is local to a domain and the > klass objects are static and not domain specific). This means that the > call: > > mono_runtime_invoke (klass->vtable[i], sampleApplicationHost, NULL, > NULL); > > Just calling the method on the global class object pointing > to the local > implementation instead of calling the remoting wrapper that calls > managed world and remoting (and is then changed into the other domain > and called..) > > The easy fix for this is to call the vtable on the object directly > instead (it contains compiled remote wrappers): > > mono_runtime_invoke (sampleApplicationHost->vtable[i], > sampleApplicationHost, NULL, NULL); > > This should (I haven't tested it) call the correct remoting function, > the vtable slot (should) will be the same as for the class. > > Cheers, > Patrik Torstensson > > > -----Original Message----- > > From: Daniel Lopez [mailto:[EMAIL PROTECTED] > > Sent: Monday, February 24, 2003 7:02 PM > > To: [EMAIL PROTECTED] > > Subject: [Mono-list] AppDomain > > > > > > > > Hi, > > > > I am looking for the correct way to call a method in a > > transparent proxy > > from the C side of mono. When I create an object in a > > different AppDomain > > and call it from C# everything is fine, but when I do it from > > C, it gets > > executed in the same domain. > > I attach some sample code to demonstrate what I mean. > > > > In c# the result of compiling and running test.exe: > > mcs test.cs /r:System.Web > > mono test.exe > > > > Main AppDomain: test.exe > > Process request AppDomain: 56ca2e66 > > > > And compiling and running test.c > > mcs test.cs /r:System.Web /target:library > > cp test.dll /usr/lib (or somewhere where it will be picked > > up from the path) > > gcc -o test test.c pkg-config --cflags --libs mono -lm > > ./test > > > > Main Domain: testing > > Process request AppDomain: testing > > > > > > So what is the correct way of invoking the method so it will > > be executed in > > the other domain? I tried every method I could think of > with no luck. > > > > Best regards > > > > DAniel > > > _______________________________________________ > Mono-list maillist - [EMAIL PROTECTED] > http://lists.ximian.com/mailman/listinfo/mono-list > _______________________________________________ Mono-list maillist - [EMAIL PROTECTED] http://lists.ximian.com/mailman/listinfo/mono-list
