从IronPython调用C#对象方法

3
我正在尝试在我的游戏中嵌入一个脚本引擎。由于我是用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那样成熟。如果足够接近,我可能会选择它。

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


1
从IronPython调用C#方法对我来说效果很好。我没有看到你的代码有什么问题,也许你可以把它完整地发布出来,这样我们就可以测试一下。此外,我使用IronPython和IronRuby,而IronPython比IronRuby稳定10倍。如果你开始推动它,你会遇到IronRuby的问题。 - sipsorcery
2个回答

5

我刚刚看到这个...你不需要发布所有的代码,但是我猜测SayHello方法是公开的,这是正确的,然而包含SayHello方法的类也需要是公开的,这样Python才能看到它。


1
如果是那样的话,我想为什么IronRuby可以看到这个方法呢? - Jason

1
可能是因为您没有将类“test”声明为“public”,使其对IronPython可见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接