从IronPython调用C#对象方法

时间:2010-03-17 00:05:55

标签: c# ironpython ironruby

我正在尝试在我的游戏中嵌入脚本引擎。由于我是用C#编写的,我认为IronPython非常合适,但我能够找到的例子都集中在用C#调用IronPython方法而不是IronPython脚本中的C#方法。

为了使事情变得复杂,我在Windows 7 64位上使用Visual Studio 2010 RC1。

IronRuby的工作方式与我预期的一样,但我对Ruby或Python语法不是很熟悉。

我在做什么:

        ScriptEngine engine = Python.CreateEngine();
        ScriptScope scope = engine.CreateScope();

        //Test class with a method that prints to the screen.
        scope.SetVariable("test", this); 

        ScriptSource source = 
          engine.CreateScriptSourceFromString("test.SayHello()", Microsoft.Scripting.SourceCodeKind.Statements);

        source.Execute(scope);

这会产生错误,“'TestClass'对象没有属性'SayHello'”

使用“self.test.SayHello()”

,这个确切的设置适用于IronRuby

我使用IronRuby时很谨慎,因为它看起来并不像IronPython那样成熟。如果它足够接近,我可能会接受它。

有什么想法吗?我知道这一定很简单。

2 个答案:

答案 0 :(得分:5)

我刚刚有了这个...你没有发布你的所有代码,但我猜SayHello是公共的,这是正确的,但是包含SayHello函数的类也需要公开,以便Python可以看到它。

答案 1 :(得分:1)

可能是因为您没有声明您的班级“test”是“公开的”,以使其对IronPython可见。