Sorry to spam the list, but I did some more tracking on this and figured something out. I downgraded from 2.7b1 to 2.6.2 and my original example worked just fine in. I thought my woes were over, and then I ran into a similar problem in 2.6.2. It appears that IPy cannot cast an object to a different type, specifically an interface in 2.6.2, when the class is internal and you're working with PrivateBinding = true
I logged it as http://ironpython.codeplex.com/workitem/29939 with the following example: internal interface IExample { string Message { get; set; } } internal class Avatar : IExample { public string Message { get; set;} public Avatar() { Message = "I am an avatar."; } public void Hello(Avatar avatar) { Console.WriteLine("From Hello: " + Message); } public void Hi(IExample avatar) { Console.WriteLine("From Hi: " + Message); } } Using the following python code: avatar = Avatar() avatar.Hello(avatar) avatar.Hi(avatar) avatar.Hello prints it's message as expected, but avatar.Hi fails with: System Error: object reference not set to instance of object. On Sat, Jan 8, 2011 at 6:07 PM, Leo Carbajal <des...@gmail.com> wrote: > Ok, here's a clarification. > > Say you have this class: > > internal class ZMPReporter : IReporter > { > public string Setting { get; set; } > > internal void Trixery(string mes, string mes1, string mes2, bool > thing) > { > Flash(mes, mes1, mes2, thing); > } > > public void Flash(string sender, string message, string recipient, > bool isAuthor) > { > ... > } > } > > It's a property of another class. In C# I would use it as follows: > caller.Reporter.Flash(..parameters..) > > If I call it in a normal IPy engine it fails to even recognize the caller > variable, which is fine and totally expected (and desired). In the > PrivateBinding scenario described I can call > > caller.Reporter.Setting and get the text data perfectly. When I try to call > caller.Reporter.Flash(), though, I get the System Error: object reference > not set problem. However, I can call caller.Report._ZMPReporter__Trixery() > just fine, which in turn calls Flash for me. > > I don't mind using the name mangling overly, but I do mind having to make > internal proxies for perfectly good, already existing, functions. I can't > just make those methods internal because the IReporter interface demands > that they be public. If this was the only class that might give me problems > I might even look for a way around that, but the entire project uses > Interfaces extensively. > > On Sat, Jan 8, 2011 at 5:36 PM, Leo Carbajal <des...@gmail.com> wrote: > >> Hello all, >> >> Almost I thought I could have my cake and eat it too. I have a large >> client-server project written in C# that I wanted to be able to script with >> IronPython. The biggest requirement was that I wanted external admins to be >> able to provide scripts for the server to augment its functions. However, I >> don't want them to have full access to the server API so I resigned myself >> to write the project with everything Internal and then build public facing >> classes for the functionality I wanted to expose. This, I know, to work >> fine. >> >> however, I still want to be able to use scripts on the server myself, for >> other things. I ended up using two engines, one with PrivateBinding on and >> one without. The one with PrivateBinding set to true can see all private and >> internal members but whenever I try to call a function from IronPython I get >> an exception of "System Error: Object reference not set to an instance of an >> object." It's weird because I can call on properties and get their values, >> but not functions. If I do a dir() on the class, and the member, IronPython >> can clearly see what they are and that they exist. If it helps, the class >> i'm trying to access is internal but has all public members (for >> interfaces). >> >> I guess my question is whether this behavior is intentional or not. Being >> able to use my API on one engine for actual server work while providing a >> different one for plugin\event hook writers, would help tremendously. >> > >
_______________________________________________ Users mailing list Users@lists.ironpython.com http://lists.ironpython.com/listinfo.cgi/users-ironpython.com