Hello all (especially John),

I've been experimenting with calling into IronPython from Javascript 
using Silverlight.

The way to call into managed code is to mark classes and methods with a 
Scriptable attribute. Obviously you can't do this from IronPython - 
still no attributes support ;-). The obvious way to attempt is to create 
a C# class with the attributes and subclass from IronPython.

I have a basic C# example working, so I know I'm on the right track.
Unfortunately it fails to work from IronPython (either using the C# 
class directly or a subclass). The error is:

Script object of type 'ScriptableClass.Class' contains a script member 
'method' with an invalid type ('System.Object').
Exception Details: System.NotSupportedException: Script object of type 
'ScriptableClass.Class' contains a script member 'method' with an 
invalid type ('System.Object')..

Stack Trace:

  at OnLoad in test.py, line 22

 
This could be because it is only valid to return a string or other 
primitive type from a Scriptable method. I wonder if when done from 
inside IronPython the method signature is mutated to appear as if it 
returns Object ?


Here is the basic C# code:

using System;
using System.Windows.Browser;

namespace ScriptableClass
{
    [Scriptable]
    public class Class
    {
        [Scriptable]
        public object method()
        {
            return this._method();
        }

        public object _method()
        {
            return "hello";
        }
    }

}


The Python code that calls it (adding the reference is working now - God 
knows why - must have been an oddity on my system - sorry):

import clr
clr.AddReference("ScriptableObjects, Version=1.0.0.0, Culture=neutral, 
PublicKeyToken=null")

import System
import System.Windows.Browser

from System.Windows import WebApplication
from System.Windows.Browser import HtmlPage


from ScriptableClass import Class
   
class Subclass(Class):
    def _method(self):
        return 'wobble'
       
   
def OnLoad(sender, e):   
    example1 = Class()
    example2 = Subclass()
   
    WebApplication.Current.RegisterScriptableObject("test1", example1)
    WebApplication.Current.RegisterScriptableObject("test2", example2)


The error is at the *first* call to "RegisterScriptableObject" - so it 
isn't even with the subclass...

If anyone has any clues as to how I might work round this then it would 
be much appreciated. (I have already tried moving the call to 
"RegisterScriptableObject" into C#, but still passing in instances 
created in Python code and this made no difference.)

All the best,


Michael Foord
http://www.voidspace.org.uk/ironpython/index.shtml

_______________________________________________
users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to